pon*_*tus 4 c++ destructor local-variables
在设计一个动态分配内存的类时,我遇到了有关内存分配的以下问题.我希望你们中的一些人能够指出我如何以更好的方式设计课程.我的类动态分配内存,因此也在析构函数中删除它.
为了说明问题,请考虑以下愚蠢的类声明:
class testClass{
int* data;
public:
testClass(){
data = new int;
*data = 5;
}
~testClass(){
delete data;
}
};
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在假设我在main中创建了其中一个对象
int main(){
testClass myObject;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然还没有问题.但是,假设我现在编写一个函数,它将一个testClass对象作为输入并从main调用它.
void doNoting(testClass copyOfMyObject){
//do nothing
}
int main(){
testClass myObject;
doNothing(myObject);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这一次,该函数创建了一个局部变量copyOfMyObject,它只是myObject的一个副本.然后,当到达该函数的末尾时,该本地对象自动调用其析构函数,该析构函数删除其数据指针指向的内存.但是,由于这是myObject的数据指针指向的相同内存,myObject无意中在进程中删除了其内存.我的问题是:什么是设计课程的更好方法?
当你调用时doNothing(),它正在制作你的testClass对象的副本,因为它是按值传递的.不幸的是,当这个副本被销毁时,它会调用析构函数,它会删除data原始实例使用的析构函数testClass.
您想了解"复制构造函数"和"通过引用传递".也就是说,您应该为您的类定义一个复制构造函数,以便在复制一个实例时,它为其data成员分配自己的内存.此外,您可以传递指针或引用,而不是传递值doNothing(),以便不进行复制.