操作员破坏的返回值*

时间:2016-08-27 22:01:44

标签: c++ scope return operator-overloading

我创建了一个乘法运算符重载。它的声明如下:

T operator*(const T & right);

它创建一个本地 T 对象,计算其值并返回它。问题是,当它返回时,它似乎超出范围并且正在调用它的析构函数。 AFAIK它不应该发生,因为return语句应该创建一个副本。我没有提到它;该对象包含动态分配的内存,但它应该由我创建的赋值运算符处理。所以我有这样一句话:

t1 = t2 * t3;

其中 t1 t2 t3 T 对象。

我已经使用了我的调试器,operator*内的本地临时 T 对象很好,但返回的对象缺少动态分配的内容。

我想到的是return语句没有正确复制我的对象,因为它没有复制动态分配的内容,因为缺少复制构造函数。所以我做了一个这样的复制构造函数:

T(const T & arg)
{
    *this = arg;
}

所以它会使用我的赋值运算符。事情开始变得怪异的时候。每次调用复制构造函数时,我都会得到堆栈溢出(差不多)。在调试时,似乎它甚至没有调用赋值运算符。可能有什么不对?

1 个答案:

答案 0 :(得分:0)

好的,谢谢你的回复。 规则3/5 是个问题。我还有一种数据分配方法,在清理之前没有检查先前是否分配了数据。 已解决:)