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 回答