下面的一些想法來自《effective c++》中的 item 28: 避免返回物件內部構件的「控制代碼」 。
避免返回物件內部構件的控制代碼(引用,指標,或迭代器(也算是指標))。
如果返回物件內部構建的控制代碼(引用、指標),當物件先於內部控制代碼析構後,內部控制代碼會「空懸」。這裡的「空懸」即指標無意義的指向,會引起堆記憶體無法釋放。
如果返回物件內部的物件,不會有問題,物件會自動析構。
我想:不光要避免返回物件內部構建的控制代碼,對於「動態」(堆)物件,也要謹慎,在釋放「動態」物件之前,一定要釋放其內部的控制代碼。
萬一要對物件內部控制代碼操作,一定要獲取到物件的指標或引用,如果使用臨時變數只會改變臨時變數的拷貝,並不會改變物件的本體。當返回乙個臨時變數的拷貝時只有值,沒有位址!!!
避免返回物件內部構件的控制代碼,這樣也會提高封裝性,幫助 const 成員函式產生 cosnt 效果。
#include using namespace std;
class point
void setx(int newval)
void sety(int newval)
int &getx()
int gety()
~point()
//point& upperleft() const
//如果沒有&,返回的是pdata->ulhc的拷貝,而非pdata->ulhc本身;後續對pdata->ulhc的拷貝賦值,並不會改變它的本體
point& upperleft() const
//const point& upperleft() const
//返回const 型別,會使物件內部構建唯讀,提高封裝性
point& lowerright() const
void print() const
{ cout<<"upperleft: "<
避免返回內部資料的控制代碼
假設b是乙個const string物件 class string const string b hello world b是乙個const物件 既然b為const,最好的情況當然就是無論現在還是以後,b的值總是 hello world 這就寄希望於別的程式設計師能以合理的方式使用b了。特別是,千萬...
學習 避免返回內部資料的控制代碼
請看物件導向世界裡發生的一幕 物件a 親愛的,永遠別變心!物件b 別擔心,親愛的,我是const。然而,和現實生活中一樣,a會懷疑,能相信b嗎?同樣地,和現實生活中一樣,答案取決於b的本性 其成員函式的組成結構。假設b是乙個const string物件 class string const stri...
c 避免返回內部資料的控制代碼
c primer中說了,在乙個物件呼叫其成員函式時,它隱含的乙個形參this指標。例如,我們定義了乙個函式ctest ttt 實際上在編譯器中該函式的定義就是ctest ttt ctest const this 該this指標所指向的內容可以改變,但是該this指標不可以被改變。當我們用ctest的...