还是关于C++操作符重载的问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 23:02:04
高手们好,小弟定义了这样一个对象,如下
class Num
{ int* n;
Num()
{n = new int[10];}
~Num()
{delete [] n;}
};
如果我重载+号,实现两个高精度数的加法,如下
Num& operator + (num& a,num & b)
{ num * r = new num;
......
return *r; }
然后主函数中有
num a,b,c;
c=a+b;
那么在创建对象C的时候,系统为C开辟了空间,而调用加法函数时,系统又开了一个空间。函数结束后。C.n的值被加法返回的指针值覆盖了。那么原来系统开辟的空间又怎么delete呢?
有没有可能直接将c的引用作为参数传递给操作符函数呢?谢谢大家。

可以再重载=运算符,当发生=运算时,将以前的空间delete掉。
重载+的时候跟c没关系,重载=才跟 c有关系,本来就是C对象的方法,用C的引用好像没什么意义。

像你这样赋值的话,还有个问题就是两个对象指向同一空间!
如果有一个对象析构,另一个对象的指针就野了。
要么重载拷贝构造函数,用深拷贝。
要么另外储存,并使用引用数,避免拷来拷去。