我希望我的头衔不会产生误导,但我想问一些我不知道正确名称的东西。
首先,我不是在询问是否可以通过静态函数调用非静态成员。我知道非静态成员属于对象的实例,静态函数属于对象本身。我想知道的是不同的东西。
我在硕士论文期间开发了一个程序,它具有很高的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 ++中是否有一些关键字允许以静态方式存储函数,但动态地将实例的非静态成员保存为该函数的可交换值。
希望现在更清楚我正在寻找的东西。
答案 0 :(得分:4)
创建我的对象的实例,也为我的对象中的每个成员函数创建一个实例。
不,它没有。函数只存在于代码的一部分内存中,并且不以任何方式与单个对象相关联。
c ++中是否有一些关键字允许以静态方式存储函数,但动态地将实例的非静态成员保存为该函数的可交换值。
在C ++中没有关键字,因为默认情况下会发生这种情况(并且无法解决)。
如果您的对象太大,那是因为它们存储了太多数据。代码不是对象数据布局的一部分,并且不会影响其大小。