在单例模式中,通常我们将构造函数/析构函数设为私有。我理解,因为我们不希望用户创建/删除单例对象。应该只有获取或创建实例的方法。但是,我不明白为什么我们需要将复制构造函数和赋值运算符设置为私有。在单例中使复制构造函数和赋值运算符私有的优点是什么。
答案 0 :(得分:2)
Singleton obj1 = Singleton::CreateInstacnce();
Singleton obj2 = obj1; // copy ctr gets called
Singleton obj3;
obj3 = obj1; // assignment operator gets called
因此,如果您不将它们设为私有,则会创建多个Singleton类实例
答案 1 :(得分:1)
如果复制单例,则会有两个相同类型的对象。单例的目的是仅强制实施一个实例。复制会打破这种假设。
答案 2 :(得分:0)
在单例模式中,我们只想实例化一个对象。正如您所说,我们不希望用户创建/删除单例对象,我们也不希望用户复制第二个对象。
答案 3 :(得分:0)
Singleton obj1 = Singleton::CreateInstacnce();
Singleton obj2 = obj1; // copy ctr gets called
Singleton obj3;
obj3 = obj1; // assignment operator gets called
根据我的观点,我认为只有复制ctr应该是私有的以及构造函数。
自Singleton obj3以来,无需将Assignment运算符设为私有;无论如何都会给出错误,说Singleton()是私有的。