2012-05-06 19 views
25

時々私はデフォルトのコンストラクタを提供したくないし、コンパイラに自分のクラスのシステムデフォルトのコンストラクタを提供させたくありません。 C++ 11で私のようなことを行うことができます。デフォルトのコンストラクタを削除するにはどうすればいいですか?

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

しかし、現在、私の講師は私が私の割り当てでそれを行うことはできません。問題は、C++ 11以前では、暗黙的にデフォルトのコンストラクタを提供することを停止するようにコンパイラに指示する方法はありますか?

答えて

34

私は、デフォルトコンストラクタを呼び出すことができるようになります(クラス自体や友人のクラスは外から)

class MyClass 
{ 
private: 
    MyClass(); 
} 

のようなものと誰も...それはプライベートにすると言うでしょう。また、クラスの使用には3つのオプションがあります:パラメータ化されたコンストラクタを提供するか、それをユーティリティクラス(静的関数のみのもの)として使用するか、このタイプのファクトリをフレンドクラスに作成するかのいずれかです。

+0

彼の著書「Effective Modern C++」に書かれているScott Meyersは、定義なしにプライベートコンストラクタを残すこともできます。これは、デフォルトのコンストラクターをフレンドクラスから呼び出すことから保護するのに役立ちます(リンクエラーがスローされます)。 – MrPisarik

12

独自のコンストラクターをデフォルトまたはそれ以外のものとして定義します。

また、非公開と宣言して電話するのは不可能です。残念ながら、静的な関数を呼び出してクラスを呼び出さない限り、クラスは完全に使用できなくなります。

関連する問題