如果我不想让任何人创建我的类的实例,除了我的静态函数(我认为这叫做singleton / factory?),是否足以使默认构造函数成为私有,或者我也是需要显式定义和私有一个拷贝构造函数和赋值运算符吗?
答案 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)
如果你只想要一个实例,那么是的,复制构造函数应该是私有的。赋值运算符无关紧要,因为无论如何都无法使用它。