我希望我的标题不会误导人,但我想问一些我不知道正确标题的问题。
起初,我不是在问是否可以通过静态函数调用非静态成员。我知道非静态成员属于对象的实例,而静态函数属于对象本身。我想知道的是一些不同的东西。
我在硕士论文期间开发了一个程序,该程序占用大量 RAM。我想知道为什么,因为我一直在使用引用,只有在确实有必要时才复制变量和对象。但是,检查内存分配我注意到我的对象每个占用 250kB 的内存,而且我有很多。我想通过仅实例化真正需要实例化的内容来减少内存量。
创建我的对象的实例也会为我的对象中的每个成员函数创建一个实例。我现在的问题是:
由于函数不会改变但值会改变,我是否可以将函数声明为静态的,这样它就不需要一直被复制,但仍然可以对一个函数的非静态成员变量进行更改实例?
我希望我的要求很清楚。
为了强调我的想法,我想举一个小例子。
假设我有以下代码
class myObject(){
myType myVariable;
void getMyVariable(myType &typRef){
typRef = this->myVariable;
}
}
int main(){
myObject o1;
myObject o2;
myType t1;
myType t2;
o1.getMyVariable(t1);
o2.getMyVariable(t2);
std::cout << "Variable of object 1 is " << t1 << std::endl;
std::cout << "Variable of object 2 is " << t2 << std::endl;
}
我调用了 getMyVariable(myType &)
函数两次。但是,存储一次就足够了,因为我对每个实例都执行相同的操作。唯一改变的是我返回的变量。
C++ 中是否有一些关键字允许以静态方式存储函数,但动态地将实例的非静态成员作为该函数的可交换值。
希望现在我正在寻找的东西更清楚了。
最佳答案
Creating an instance of my object, creates also an instance for each member function within my object.
不,它没有。函数只存在一次,在专用于代码的内存部分中,并且不以任何方式与单个对象相关联。
Is there some keyword in c++ that allows to store a function in a static manner but dynamically holds the non-static members of an instance as exchangeable values to that function.
在 C++ 中没有关键字,因为它默认发生(并且没有办法绕过它)。
如果您的对象太大,那是因为它们存储了太多数据。代码不是对象数据布局的一部分,不会影响其大小。
关于c++ - 非静态成员的静态成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41427303/