C++若不想使用編譯器自動生成的函式,就該明確拒絕
- 為什么要拒絕?
- 將copy建構式或copy assignment運算子宣告為private,并且不定義
- 使用delete(C++11 )
為什么要拒絕?
比如,房產應該是獨一無二的,這情況下應該拒絕物件拷貝動作
一般情況下,不宣告相應函式即可拒絕,但是編譯器會為類合成一些函式,因此需要顯式拒絕
還是以拒絕物件拷貝為例子,拒絕方法包括:
將copy建構式或copy assignment運算子宣告為private,并且不定義
(這被用于C++ iostream程式庫中)
–這種情況下member函式和friend函式還是可以呼叫,如果member函式或friend函式中執行了復制,會引發鏈接錯誤,可以使用一個基類,在基類中將copy建構式或copy assignment運算子宣告為private,并且繼承這個基類,這樣可以將鏈接錯誤移至編譯期,因為嘗試拷貝時,編譯器會試著生成一個copy建構式和一個copy assignment運算子,這些函式的“編譯器合成版”會嘗試呼叫其基類的對應兄弟,而那些呼叫會被編譯器拒絕,因為private
使用delete(C++11 )
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/260088.html
標籤:其他
上一篇:linux下Appium+Python移動應用自動化測驗實戰---4.Android Emulator Headless
