如何创建一个只能由自己的类调用的构造函数?因此,当我有一个类Foo
时,如果从Foo
的静态成员调用它,则只能使构造函数可调用。
答案 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
};