为什么在单例模式中,我们确实将复制构造函数和赋值运算符设为私有?

时间:2014-11-20 06:43:37

标签: c++ singleton

在单例模式中,通常我们将构造函数/析构函数设为私有。我理解,因为我们不希望用户创建/删除单例对象。应该只有获取或创建实例的方法。但是,我不明白为什么我们需要将复制构造函数和赋值运算符设置为私有。在单例中使复制构造函数和赋值运算符私有的优点是什么。

4 个答案:

答案 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()是私有的。