C 設計乙個類不能偷懶的地方

2021-06-07 20:45:22 字數 1105 閱讀 4583

1、建構函式/預設建構函式:關於怎樣去初始化乙個物件的問題,也就是乙個新的資料型別怎樣去填充它的內容,需要考慮是否需要是explicit還是implicit強調,一般建議explicit來強調,因為存在隱式型別轉換總是讓人不太放心。需要考慮的細節很多,有預設引數的值設計,資料成員初始化列表等等。。。例項化乙個物件也就是執行了一次相應的建構函式,保證例項化之後的物件的資料成員的內容可控總是好的。

class a

//...

private:

x x;

y y;

//... };

2、拷貝建構函式/賦值函式:這裡涉及到的思考是怎樣準確複製乙個物件的問題。尤其是在類當中有指標指向自由空間的資源(堆空間)的時候,這個時候更加不能依賴於由編譯器預設產生的拷貝建構函式/賦值函式,因為預設的情況是按物件的成員逐個複製的,往往會涉及到析構函式多次析構同一資源,造成的結果是未定義的!又比如智慧型指標的所有權的轉移的問題,甚至會出現了業務邏輯錯亂的陷阱。

一般形式是:

class a ;

這個時候,需要做的就是要頭腦清醒,為這些複製操作定義自己認為最適合的任何意義。一般來講,拷貝建構函式和賦值函式是不一樣的,根本原因就是。拷貝建構函式是去完成對未初始化的儲存區的初始化,而賦值函式是去正確處理乙個結構良好的物件。通常情況下,可以對賦值函式做一些優化,策略是:防止自賦值,刪除那些舊資源,複製新資料。通常每個非靜態成員都必須複製

3、析構函式:c++程式設計師第一要學會的事情就是要學會照顧好自己的程式!首先就是要管理好申請的資源,承諾自己**不再使用的資源,c++物件模型,或者管理自定義資料型別資源的乙個關鍵的模型就是析構函式,編譯器保證在物件的生命期結束的時候執行該物件的析構函式(如果沒有明確定義,那麼就幫你生成乙個),這是乙個語言機制

!要麼乖乖按規則辦事,要麼自己負責後果。析構函式可以認為她是酒店打掃衛生的阿姨,當你在酒店房間裡開完激情的party之後,你需要有人來幫你清理這一切,對吧?否則退房之後不管不顧,那不情況一團糟嗎?所以承諾你設計的乙個良好的類,一定要有乙個對應的釋放資源的機制,關鍵之一是析構函式。

class a ;

用C 設計乙個不能被繼承的類

如果將乙個類設計成不能被繼承來的類,只要把類的建構函式設定為私有的,即可解決問題。因為那樣的話,子類就沒有辦法訪問基類的建構函式,從而就阻止了進行子類構造物件的任務實現,也就達到了不可繼承的目的。因為構造方法為私有,所以外部也不能呼叫建構函式生成例項,我們需要提供特殊的方法建立例項。具體做法是定義靜...

用C 設計乙個不能被繼承的類

一,把建構函式設為私有函式 在c 中子類的建構函式會自動呼叫父類的建構函式,子類的析構函式會自動呼叫父類的析構函式。要想定義乙個不能被繼承的類,我們只要把它的建構函式和析構函式都定義為私有函式。那麼當乙個類試圖從他那繼承的時候,必然會由於呼叫建構函式 析構函式而導致編譯錯誤。這個類的建構函式是私有的...

用C 設計乙個不能被繼承的類

在 c 中,子類的建構函式會自己主動呼叫父類的建構函式。相同,子類的析構函式也會自己主動呼叫父類的析構函式。要想乙個類不能被繼承,我們僅僅要把它的建構函式和析構函式都定義為私有函式。那麼當乙個類試圖從它那繼承的時候,必定會因為試圖呼叫建構函式 析構函式而導致編譯錯誤。template class a...