有時我不想提供默認構造函數,也不希望編譯器爲我的類提供系統默認構造函數。在C++ 11中,我可以這樣做:如何刪除默認的構造函數?
class MyClass
{
public:
MyClass() = delete;
};
但是,目前我的講師不允許我在我的任務中這樣做。問題是:在C++ 11之前,有沒有辦法告訴編譯器停止隱式提供一個默認的構造函數?
有時我不想提供默認構造函數,也不希望編譯器爲我的類提供系統默認構造函數。在C++ 11中,我可以這樣做:如何刪除默認的構造函數?
class MyClass
{
public:
MyClass() = delete;
};
但是,目前我的講師不允許我在我的任務中這樣做。問題是:在C++ 11之前,有沒有辦法告訴編譯器停止隱式提供一個默認的構造函數?
我會說把它變成私有..像
class MyClass
{
private:
MyClass();
}
,沒有人(來自外部的類本身或友元類)將能夠調用默認的構造函數。此外,您還可以選擇使用該類的三個選項:提供參數化構造函數或將其用作實用程序類(僅用於靜態函數)或在朋友類中爲此類型創建工廠。
當然。定義您自己的構造函數,默認或其他。
您也可以聲明它爲私人的,這樣就不可能打電話。不幸的是,這會使你的類完全無法使用,除非你提供一個靜態函數來調用它。
Scott Meyers在他的着作Effective Modern C++中寫道,這也可以讓你的私有構造函數沒有定義。它將幫助你保護你的默認構造函數免受朋友類的影響(鏈接錯誤將被拋出)。 – MrPisarik