我是C ++初学者,尽管我对C有一定的经验。我从以下来源查看了有关操作符重载的代码片段: https://www.geeksforgeeks.org/operator-overloading-c/
#include<iostream>
using namespace std;
class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i =0) {real = r; imag = i;}
// This is automatically called when '+' is used with
// between two Complex objects
Complex operator + (Complex const &obj) {
Complex res;
res.real = real + obj.real;
res.imag = imag + obj.imag;
return res;
}
void print() { cout << real << " + i" << imag << endl; }
};
int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2; // An example call to "operator+"
c3.print();
}
我不明白在返回“ +”后,在“ +”函数中创建的“ res”对象如何继续存在。
返回语句后是否应该删除堆栈框架及其所有内容?我的直觉说,c3已分配给一个不再存在的对象,因此对c3的print函数的调用不应起作用,因为它所引用的对象已被破坏。
如果这是C而不是C ++,则可以使用“ malloc”在堆上分配内存来保存res,这意味着它不会存在于堆栈框架中,因此不会被删除。但是似乎这里没有做任何事情。
我的推理有什么问题?这是C和C ++之间的区别,还是我记错了C的某些方面?还是两者都有?
答案 0 :(得分:0)
不是。将res
复制到返回值中,然后将res
销毁,然后函数返回。
然后将返回值复制到c3
中,然后销毁返回值。