c ++私有构造函数

时间:2010-11-03 22:34:35

标签: c++ singleton private-constructor

如果我不想让任何人创建我的类的实例,除了我的静态函数(我认为这叫做singleton / factory?),是否足以使默认构造函数成为私有,或者我也是需要显式定义和私有一个拷贝构造函数和赋值运算符吗?

4 个答案:

答案 0 :(得分:3)

使constuctor为工厂方法模式。单例模式需要工厂方法 如果您不希望复制类,则boost具有noncopyable,但正如James McNellis已经评论过的那样:决定用户是否应该能够复制该类。因为原始指针和固有的内存管理不应该在类中占有一席之地,所以复制类的问题主要是针对使用资源或可能是大容器的类。

答案 1 :(得分:2)

是的,我会做所有这三个经理职能。如果没有,您不希望能够访问复制构造函数。例如,这是有效的:

Singleton * s;
Singleton copy( *s );

做类似的事情:

class Singleton
{
private:
  Singleton();
  Singleton(const Singleton &);
  Singleton & operator = (const Singleton &);
};

答案 2 :(得分:0)

是的,通常你必须这样做。如果没有,您可以通过复制构建一个新对象:

MyClass newObject = your_singleton_of_type_MyClass;

在这种情况下,会发出复制构造函数,实际创建两个对象。使复制构造函数私有可以通过使此代码非法来防止复制。

答案 3 :(得分:0)

如果你只想要一个实例,那么是的,复制构造函数应该是私有的。赋值运算符无关紧要,因为无论如何都无法使用它。