2

独自のクラスでのみ呼び出すことができるコンストラクターを作成するにはどうすればよいですか? したがって、 Class があるFoo場合、の静的メンバーから呼び出された場合にのみコンストラクターを呼び出し可能にしFooます。

4

2 に答える 2

12

コンストラクターを非公開にすることができます。

class Foo
{
private:
   Foo();
public:
   static Foo* Create() { return new Foo(); }
}

そして、静的メソッドCreate()を使用してクラスのインスタンスを作成します。

コンストラクターを静的にする主な理由は、ファクトリ、シングルトン、またはクラスに静的メソッドのみが含まれている場合にオブジェクトの作成を強制することです。つまり、典型的なシングルトン実装 (簡単にするためにシングルスレッド):

class Singleton
{
private:
   Singleton();
public:
   static Foo& GetInstance() { static Foo Instance; return Instance; }
}
于 2013-08-11T15:35:23.420 に答える
10

コンストラクターを非公開にします。

class Foo
{
  Foo();
 public:
  static void usesFooConstructor();
  static Foo& makeInstance();  // only if you need a handle to an instance
};
于 2013-08-11T15:35:20.827 に答える