【发布时间】:2014-05-18 13:55:04
【问题描述】:
我在使用 Copy Constructor 时遇到了一点问题。
我有一个类,它包含两个结构和两个指向第一个结构的指针(假设我有一个第一个结构的链表,每个都包含第二个结构的链表)。他们似乎都工作正常。但是……
当我使用复制构造函数创建类的另一个实例时(进行深度复制,每个元素都被复制,因此每个实例都有自己的链表)使用
MyClass a,b;
// Operations with a
b ( a );
一切正常。但是后来……
MyClass a,b;
// Operations with a
b = a;
似乎也可以工作,但随后我的析构函数失控,并尝试多次释放某些元素,并发送以下内容:
* `./a.out' 中的错误:双重释放或损坏 (!prev):0x000000000258a540 *
与 ==Backtrace== 和 ==Memory Map== 一起,结束通过 SIGABRT 信号杀死我的程序。
那么,当复制构造函数工作正常并且存在时,赋值有什么问题?我应该覆盖 operator= 吗?
【问题讨论】:
-
如果你显示使用
MyClass的代码,这将更有成效。 -
不看代码无法回答...
-
除非您有电话接线员
MyClass::operator()(MyClass),否则第一个版本无法正常工作。
标签: c++ class constructor copy