比方說,我們有這個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