在操作符*中解构返回值
Return value destructed in operator*
我正在创建一个乘法运算符重载。它是这样声明的:
T operator*(const T & right);
创建一个局部T对象,计算它的值并返回它。问题是,当它返回时,它似乎超出了作用域,并且它的析构函数正在被调用。我想这不应该发生,因为return语句应该创建一个副本。我没有提到它;对象包含动态分配的内存,但它应该由我做的赋值操作符处理。所以我有这样一行:
t1 = t2 * t3;
, t1 , t2 和 t3 T 对象。
我已经使用了我的调试器,operator*
内部的本地临时T对象很好,但是返回的对象缺乏动态分配的内容。
我想到的是,return语句没有正确地复制我的对象,因为它没有复制动态分配的内容,因为缺乏复制构造函数。所以我创建了一个这样的复制构造函数:
T(const T & arg)
{
*this = arg;
}
所以它会使用我的赋值操作符。就在那时,事情开始变得奇怪起来。每次调用复制构造函数时,我(几乎)都会得到堆栈溢出。在调试时,它似乎甚至没有调用赋值操作符。会出什么问题呢?
好的,谢谢你的回复。规则3/5是问题所在。此外,我有一个数据分配的方法,在清理之前,它不会检查是否有先前分配的数据。 :)
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 在类赋值操作符函数中,为什么必须返回*this ?
- 返回值的引用操作符
- 赋值操作符的返回类型是什么?
- 可以对返回子类类型的基类进行赋值操作符吗?
- 如果在调用时没有取赋值操作符的返回类型,将会发生什么?
- 重载没有返回语句的赋值操作符
- 在操作符*中解构返回值
- 算术和赋值操作符重载-返回值,范围,组合表达式
- 操作符返回值问题
- 当我从赋值操作符返回值时,首先,调用复制构造函数的机制和基础是什么?