我從「Effective C++」中讀到了這個,這是Col.10。 它說這是讓賦值操作符返回* this的引用的好方法。 我寫了一段代碼片段來測試這個想法。我在這裏重寫了賦值操作符並對其進行了測試。一切安好。 但是,當我刪除該操作符重寫時,一切都是一樣的。這意味着,鏈接分配仍然運作良好。那麼,我錯過了什麼?這是爲什麼?需要你們的解釋,謝謝。賦值操作符在C++中返回* this的引用
#include <iostream>
using namespace std;
class Widget{
public:
Widget& operator=(int rhs)
{
return *this;
}
int value;
};
int main()
{
Widget mywidget;
mywidget.value = 1;
Widget mywidget2;
mywidget2.value = 2;
Widget mywidget3 ;
mywidget3.value = 3;
mywidget = mywidget2 = mywidget3;
cout << mywidget.value<<endl;
cout << mywidget2.value<<endl;
cout << mywidget3.value<<endl;
}
哦,我明白了。那麼,我是否應該始終在我的代碼中執行此操作?或者只是讓編譯器來處理它? – 2011-04-14 21:20:14
如果你的類需要它,你需要實現'operator =',即如果默認的按位複製不正確。這通常發生在當你擁有由你的類擁有的資源的內存/句柄的原始指針時;一個好的經驗法則是,如果你需要一個析構函數來釋放一些資源,你可能需要一個'operator ='來避免不同實例之間不必要的資源共享,雙重釋放和資源泄漏。 – 2011-04-14 21:22:25
不是一個真正的按位複製......對於那些沒有自己的'運營商='會執行按位副本的成員,但實現它(想上'的std :: string')成員現有'運算符= '會員將被使用。 – 2011-04-14 21:26:37