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

C++ 为什么在单例模式中,我们将复制构造函数和赋值运算符设置为私有?,c++,singleton,C++,Singleton,在单例模式中,通常我们将构造函数/析构函数设为私有。我理解这一点,因为我们不希望用户创建/删除singleton对象。应该有唯一的方法来获取或创建实例。但是,我不明白为什么我们需要将复制构造函数和赋值操作符设置为私有。在单例模式中,将复制构造函数和赋值运算符设为私有有什么好处。在单例模式中,我们只想实例化一个对象。正如您所说,我们不希望用户创建/删除singleton对象,也不希望用户复制第二个对象 如果复制单个对象,将有两个相同类型的对象。singleton的目的是只强制执行一个实例。复制将打

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

在单例模式中,我们只想实例化一个对象。正如您所说,我们不希望用户创建/删除singleton对象,也不希望用户复制第二个对象

如果复制单个对象,将有两个相同类型的对象。singleton的目的是只强制执行一个实例。复制将打破这一假设

Singleton obj1 = Singleton::CreateInstacnce();
    Singleton obj2 = obj1; // copy ctr gets called
    Singleton obj3;
    obj3 = obj1;  // assignment operator gets called
因此,如果您不将它们设置为私有,将创建Singleton类的多个实例

Singleton obj1 = Singleton::CreateInstacnce();
    Singleton obj2 = obj1; // copy ctr gets called
    Singleton obj3;
    obj3 = obj1;  // assignment operator gets called
在这里,根据我的意见,我觉得只有副本ctr和构造函数应该是私有的


由于Singleton obj3,不需要将赋值运算符设置为私有;无论如何,都会给出一个错误,说Singleton()是私有的。

如果根本没有声明,那么考虑复制构造函数和赋值运算符的默认访问权限是什么;我们不能这样做,因为这意味着我们正在创建一个类的对象,而这个类是不允许的,因为构造函数是私有的。