对同一指针变量重复调用复制构造函数会导致内存泄漏
Repeated call of copy constructor for same pointer-variable a memory leak?
我有一个小问题:
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);
但是一旦析构函数被调用,我的程序就崩溃了。我不确定我的(非平凡的)析构函数是否有一点bug(这里不讨论不同的问题),或者在类方法中通过delete删除类成员对象是否通常被禁止。
非常感谢你的时间和帮助-感谢它!div标记
在重新分配指针之前不删除new
表达式的结果肯定会导致内存泄漏。显式的- delete
解决方案应该可以工作,但您真正需要的是一个智能指针类型的成员,例如scoped_ptr<Foo>
。
这可能(也可能不会)神奇地解决你的析构函数问题
是的,这是内存泄漏,因为对myFoo
的第二次赋值导致您分配的第一个Foo
变得不可访问。在连续分配之间删除myFoo
是正确的做法。注意,您不需要检查空指针:delete
会处理这个问题。很有可能你的Foo
的析构函数有问题
我假设"but this crash my program as soon as the destructor called"意味着主类的析构函数调用'myFoo'delete。
不要忘记在主类构造函数中初始化'myFoo'为null,这将防止在没有创建'myFoo'实例的情况下主类析构函数崩溃。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 构造函数主体内的本地指针C++内存泄漏
- 从构造函数内存泄漏引发异常
- 构造函数对象赋值是否泄漏内存
- 抛出的构造函数没有泄漏
- 在类构造函数中初始化映射时,如何避免内存泄漏
- 链接列表C 的复制构造函数中的内存泄漏
- 构造函数和内存泄漏中的异常
- 为什么在调用基类构造函数时会出现内存泄漏
- C++ 多项式复制构造函数和 ostream 覆盖导致模因泄漏?
- 构造函数和析构函数调用的数量相等,可以确保没有内存泄漏
- Memset 泄漏 MEM 在模板类构造函数中
- 为什么内存泄漏只发生在赋值运算符重载的情况下,而不是在复制构造函数中,以及复制和交换习惯用法如何解决它
- 构造函数中的本地内存泄漏
- C++ 移动构造函数和常量成员指针或常量成员,如何对它们进行 NULIZE 以避免内存泄漏
- 复制构造函数中存在内存泄漏
- 在构造函数中引发异常时防止内存泄漏的最佳做法是什么?
- C++:仅用于构造函数的内存泄漏
- C++树类:构造函数/复制/内存泄漏
- C++线程构造函数,使用new(object)会造成内存泄漏