比方说,我们有这个A级:如何在不修改操作数的情况下使用一连串的操作符重载?
class A
{
public:
int a;
A(int b)
{
a = b;
}
};
我想创建一个超载,使得我可以用它像这样
A a(1),b(2),c(3),&d;
d = a + b + c;
,而无需修改每个对象的内容。接下来顺理成章的事情将每次分配的内存新小盘这样的:
A &operator+ (const A &b)
{
A *c = new A(a+b.a);
return *c;
}
但是,这将创建一个新的问题:中间结果都将丢失,导致内存泄漏。 我可以很容易地解决这个问题,通过一个静态函数,需要三个对象引用,并将前两个的总和存储在第三个,但我敢打赌,必须有一些方法来使+过载发生我想要的方式。
所以问题是:有没有什么办法可以使用一个操作符重载链,它不会修改操作数而不会导致内存泄漏?
+1以避免手动复制。 – Sven 2012-04-28 03:19:06
抱歉,您的回答似乎忽略了一个事实,即我特意询问了一种不修改任何操作数对象 – 2012-04-28 03:21:23
@ user803253的方法:我不修改*操作数*;操作数作为值传递,这意味着您在函数中修改的是操作数的*副本。无论如何,我发布了一个更好的设计,你应该采用。 – Nawaz 2012-04-28 03:25:39