我有一个小问题:
Foo *myFoo;
myFoo = new Foo(anotherFoo); // some deep copy of another object
myFoo = new Foo(yetAnotherFoo); // another deep copy of yet another object
这是内存泄漏吗?如果是,我该如何正确避免?我的程序中的情况是,'myFoo' 是一个类成员,我想将它用作一个“唯一的”存储对象,用于不时地对其他一些对象进行深层复制(因为复制的对象已被修改之后,我需要初始对象以供以后比较)。
我尝试了一个简单的解决方法,例如:
// within a class method of the same class
if (myFoo!=NULL) delete myFoo;
myFoo = new Foo(fooToStore);
但是一旦调用析构函数,我的程序就会崩溃。我不确定我的(非平凡的)析构函数是否有点错误(这里不讨论的不同问题)或者是否通常禁止通过类方法中的 delete 删除类成员对象。
非常感谢您的宝贵时间和帮助 - 非常感谢! 标记
最佳答案
不删除 new
的结果重新分配指针之前的表达式肯定会导致内存泄漏。显式- delete
解决方案应该可行,但您真正想要的是一个智能指针类型的成员,例如一个 scoped_ptr<Foo>
.
这也可能(也可能不会)神奇地解决您的析构函数问题。
关于c++ - 为同一个指针变量重复调用复制构造函数内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646574/