如何创建一个只能由自己的类调用的构造函数?

时间:2013-08-11 15:34:25

标签: c++ constructor

如何创建一个只能由自己的类调用的构造函数?因此,当我有一个类Foo时,如果从Foo的静态成员调用它,则只能使构造函数可调用。

2 个答案:

答案 0 :(得分: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; }
}

答案 1 :(得分:10)

使构造函数成为私有的:

class Foo
{
  Foo();
 public:
  static void usesFooConstructor();
  static Foo& makeInstance();  // only if you need a handle to an instance
};