我很难知道自己做错了什么。
Huge& Huge::operator *=(const Huge& h) {
Huge retHuge = *this * h;
string out1 = retHuge.toString(); // for debugging purposes
return *this = retHuge;
// return retHuge;
}
这
Huge retHuge = *this * h;
我在字符串中验证时工作正常out1
。如果我返回 retHuge 并在调用例程中打印结果,我可以看到原始的 this 保持不变。如果我执行 a*this = retHuge
并返回*this
,我会SEGSEGV
出错。
调用析构函数清理内存并在乘法后返回结果的正确方法是什么?
我要感谢大家的回答。Crazy Eddie 使用了我所拥有的并对其进行了扩展,这正是我想做的。我更改了来源以反映他的建议,并且出现了 SEGSEGV 故障。
我认为这意味着我的语法必须基本正确,但我的其余代码中隐藏了一个错误。这是有价值的信息,我需要回去仔细查看是否能找到一些东西。我不想在没有做好功课之前偷懒和寻求帮助,所以我先好好看看。
我的经验主要是 Java,它有一个很好的未引用对象垃圾收集器。我将使用调试器并验证是否正在调用我的析构函数来释放内存。
这是一个很好的提示,首先尝试执行 *= 运算符,然后从中构建 = 运算符。很明显,我做了相反的事情。您的回答似乎仍然表明我所做的确实应该有效。既然不行,那我就回去看看能不能找到什么。如果我做完作业后还是找不到任何东西,我会继续问。与此同时,感谢所有的帮助。