既定のコンストラクターを提供したくない場合や、コンパイラにクラスのシステムの既定のコンストラクターを提供してほしくない場合があります。C++ 11 では、次のようなことができます。
class MyClass
{
public:
MyClass() = delete;
};
しかし、現在、私の講師は私の課題でそれを行うことを許可していません. 問題は、C++ 11 より前に、既定のコンストラクターの提供を暗黙的に停止するようコンパイラーに指示する方法はありますか?
既定のコンストラクターを提供したくない場合や、コンパイラにクラスのシステムの既定のコンストラクターを提供してほしくない場合があります。C++ 11 では、次のようなことができます。
class MyClass
{
public:
MyClass() = delete;
};
しかし、現在、私の講師は私の課題でそれを行うことを許可していません. 問題は、C++ 11 より前に、既定のコンストラクターの提供を暗黙的に停止するようコンパイラーに指示する方法はありますか?
私はそれを非公開にすると言います..何かのような
class MyClass
{
private:
MyClass();
}
そして、誰も(クラス自体またはフレンドクラスの外から)デフォルトのコンストラクターを呼び出すことができません。また、クラスを使用するための 3 つのオプションがあります。パラメーター化されたコンストラクターを提供するか、それをユーティリティ クラス (静的関数のみを持つクラス) として使用するか、フレンド クラスでこの型のファクトリを作成します。
もちろん。デフォルトまたはそれ以外の独自のコンストラクターを定義します。
呼び出すことができないように、プライベートとして宣言することもできます。残念ながら、これを呼び出すための静的関数を提供しない限り、クラスは完全に使用できなくなります。
デフォルトのコンストラクターをプライベートに宣言することに加えて、誰かがそれを呼び出そうとしたときに例外をスローすることもできます。
class MyClass
{
private:
MyClass()
{
throw [some exception];
};
}