2010-11-03 93 views
3

如果我不想让任何人创建我的类的实例,除了我的静态函数(我想这就是所谓的单/工厂?),是它足以让默认的构造函数私有,或我是否也需要显式定义并使私有拷贝构造函数和赋值运算符?C++私有构造

+0

这取决于;你想让这个类的消费者能够复制你的静态函数返回的实例吗? – 2010-11-03 22:38:13

+0

不,我只想要一个全局实例 – baruch 2010-11-03 22:41:05

+0

@baruch:所以只能做一个。 – GManNickG 2010-11-03 22:47:24

回答

2

是的,我会做所有3个管理员功能。如果不是,您不希望能够访问复制构造函数。例如,这是有效的:

Singleton * s; 
Singleton copy(*s); 

所以做这样的事情:

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

是的,通常你必须。如果没有,你可以通过拷贝构造一个新的对象:

MyClass newObject = your_singleton_of_type_MyClass; 

在这种情况下,拷贝构造函数发出后,实际创建两个对象。通过使该代码非法,使复制构造函数专用可防止复制。

0

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

3

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