49

既定のコンストラクターを提供したくない場合や、コンパイラにクラスのシステムの既定のコンストラクターを提供してほしくない場合があります。C++ 11 では、次のようなことができます。

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

しかし、現在、私の講師は私の課題でそれを行うことを許可していません. 問題は、C++ 11 より前に、既定のコンストラクターの提供を暗黙的に停止するようコンパイラーに指示する方法はありますか?

4

4 に答える 4

50

私はそれを非公開にすると言います..何かのような

class MyClass
{
private:
    MyClass();
}

そして、誰も(クラス自体またはフレンドクラスの外から)デフォルトのコンストラクターを呼び出すことができません。また、クラスを使用するための 3 つのオプションがあります。パラメーター化されたコンストラクターを提供するか、それをユーティリティ クラス (静的関数のみを持つクラス) として使用するか、フレンド クラスでこの型のファクトリを作成します。

于 2012-05-06T21:22:45.800 に答える
14

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

呼び出すことができないように、プライベートとして宣言することもできます。残念ながら、これを呼び出すための静的関数を提供しない限り、クラスは完全に使用できなくなります。

于 2012-05-06T21:23:02.290 に答える
1

デフォルトのコンストラクターをプライベートに宣言することに加えて、誰かがそれを呼び出そうとしたときに例外をスローすることもできます。

class MyClass
{
  private:
    MyClass() 
    {
      throw [some exception];
    };
}
于 2018-11-15T09:29:31.423 に答える