【发布时间】:2012-03-26 07:12:17
【问题描述】:
struct Node
{
int value
Node* next;
}
typedef List Node*
const Set operator +(const Set& a, const Set& b)
{
Set aSet;
List newList = mergeListsCopy(a.list, b.list);
aSet.list = newList;
return aSet;
}
class Set
{
public:
//method decs
private:
List list;
};
Set::~Set()
{
list = deleteList(list);
}
这段代码的内部工作非常好,mergeListsCopy 从两个单链表创建一个新列表,并将指针分配给作为 aSet 私有变量的列表。
问题是当 aSet 返回时,aSet.list 是一些奇怪的毒地址(在本例中为 0xf)。
当我通过调试器运行它时,在运算符重载的范围内创建了一个 Set,但是在本地也使用符号 aSet 创建了对该 set 的两个引用,在返回发生之前,程序跳转到析构函数,大概是针对无关的 Set,但由于只有一个 Set,因此它会被销毁。
当我注释掉我的析构函数时,这个问题就消失了。我做错了什么?
【问题讨论】:
-
NB 运算符方法是朋友使用的函数调用工作。
标签: c++ reference operator-overloading destructor