c++ - 为同一个指针变量重复调用复制构造函数内存泄漏?

标签 c++ memory memory-leaks deep-copy

我有一个小问题:

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/

相关文章:

iOS:使用 "malloc"自动释放分配的内存?

memory-leaks - 服务的BandwidthIn和BandwidthOut图代表什么?

c# - WCF 私有(private)内存使用增加查询

c++ - QAbstractitemModel - 无法使用 getItem 和 QModelIndex 获取 QAbstract ModelItem

c++ - 捕获函数标准输出并将其写入文件

c - 我的 C 程序有什么问题

c - 更新模块级状态字符串的正确方法

c# - 在静态方法中使用匿名lamba订阅事件会导致内存泄漏吗?

c++ - 在 Windows 应用程序的编译时嵌入 SVN 修订号

c++ - 将 template<derived> 分配给 template<base> 变量