2012-05-06 41 views
25

有時我不想提供默認構造函數,也不希望編譯器爲我的類提供系統默認構造函數。在C++ 11中,我可以這樣做:如何刪除默認的構造函數?

class MyClass 
{ 
    public: 
    MyClass() = delete; 
}; 

但是,目前我的講師不允許我在我的任務中這樣做。問題是:在C++ 11之前,有沒有辦法告訴編譯器停止隱式提供一個默認的構造函數?

回答

34

我會說把它變成私有..像

class MyClass 
{ 
private: 
    MyClass(); 
} 

,沒有人(來自外部的類本身或友元類)將能夠調用默認的構造函數。此外,您還可以選擇使用該類的三個選項:提供參數化構造函數或將其用作實用程序類(僅用於靜態函數)或在朋友類中爲此類型創建工廠。

+0

Scott Meyers在他的着作Effective Modern C++中寫道,這也可以讓你的私有構造函數沒有定義。它將幫助你保護你的默認構造函數免受朋友類的影響(鏈接錯誤將被拋出)。 – MrPisarik

12

當然。定義您自己的構造函數,默認或其他。

您也可以聲明它爲私人的,這樣就不可能打電話。不幸的是,這會使你的類完全無法使用,除非你提供一個靜態函數來調用它。