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

Jer*_*oen 2 c++ constructor

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

Ser*_* K. 12

您可以将构造函数设为私有:

class Foo
{
private:
   Foo();
public:
   static Foo* Create() { return new Foo(); }
}
Run Code Online (Sandbox Code Playgroud)

并使用静态方法Create()创建类的实例.

使构造函数静态化的主要原因可能是通过工厂,单例或类仅包含静态方法来强制创建对象.即,典型的单例实现(单线程,为简单起见):

class Singleton
{
private:
   Singleton();
public:
   static Foo& GetInstance() { static Foo Instance; return Instance; }
}
Run Code Online (Sandbox Code Playgroud)

  • 一个简单的问题:为什么你更喜欢这里的动态分配? (3认同)
  • 实际上,这个"Meyers singleton"模式(在编辑的答案中)可以在多个线程中正常工作.这在大多数C++ 03实现中始终如此,并且它是由C++ 11的规范强制实施的. (2认同)

jua*_*nza 10

使构造函数私有:

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