在设计一个动态分配内存的类时,我遇到了以下关于内存分配的问题。我希望你们中的一些人能够指出我应该如何以更好的方式设计我的课程的正确方向。我的类动态分配内存,因此也在其析构函数中删除它。
为了说明问题,请考虑以下愚蠢的类声明:
class testClass{
int* data;
public:
testClass(){
data = new int;
*data = 5;
}
~testClass(){
delete data;
}
};
到现在为止还挺好。现在假设我在 main 中创建了这些对象之一
int main(){
testClass myObject;
return 0;
}
当然仍然没有问题。但是,假设我现在编写了一个函数,该函数将 testClass 对象作为输入并从 main 中调用它。
void doNoting(testClass copyOfMyObject){
//do nothing
}
int main(){
testClass myObject;
doNothing(myObject);
return 0;
}
这一次,该函数创建了一个局部变量 copyOfMyObject,它只是 myObject 的一个副本。然后,当到达该函数的末尾时,该本地对象会自动调用其析构函数,该析构函数会删除其数据指针指向的内存。但是,由于这是 myObject 的数据指针所指向的同一块内存,因此 myObject 在此过程中无意中删除了它的内存。我的问题是:设计课程的更好方法是什么?