非静态成员

时间:2017-01-02 12:58:03

标签: c++ static

我希望我的头衔不会产生误导,但我想问一些我不知道正确名称的东西。

首先,我不是在询问是否可以通过静态函数调用非静态成员。我知道非静态成员属于对象的实例,静态函数属于对象本身。我想知道的是不同的东西。

我在硕士论文期间开发了一个程序,它具有很高的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 ++中是否有一些关键字允许以静态方式存储函数,但动态地将实例的非静态成员保存为该函数的可交换值。

希望现在更清楚我正在寻找的东西。

1 个答案:

答案 0 :(得分:4)

  

创建我的对象的实例,也为我的对象中的每个成员函数创建一个实例。

不,它没有。函数只存在于代码的一部分内存中,并且不以任何方式与单个对象相关联。

  

c ++中是否有一些关键字允许以静态方式存储函数,但动态地将实例的非静态成员保存为该函数的可交换值。

在C ++中没有关键字,因为默认情况下会发生这种情况(并且无法解决)。

如果您的对象太大,那是因为它们存储了太多数据。代码是对象数据布局的一部分,并且会影响其大小。