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

How To Create a Constructor Which Can Only be Called by Its Own Class?

本文关键字:自己的 调用 构造函数 一个 何创建 创建      更新时间:2023-10-16

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

您可以使构造函数私有化:

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; }
}

使构造函数私有:

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