我知道为什么要使默认构造函数和复制构造函数私有(private)以在 C++ 中实现单例类。但我不明白的是,为什么要将复制赋值运算符设为私有(private),因为不会有两个现有对象开始。
我的探索带来了两点:
根据 Alexandrescu 在“现代 C++ 设计”中的说法,赋值 运营商将被私有(private)化以防止 self 分配。
其次,根据rule of three ,如果你定义了一个构造函数, 一个类的复制构造函数和赋值运算符,你应该定义 明确地所有三个。那么,是否需要遵守这条规则 仅。
那么,您对此有何看法?
最佳答案
我认为,禁止赋值更多是出于语义上的考虑:由于单例唯一,对其赋值没有任何意义。因此,即使在技术上什至可以以合理的方式实现赋值,从逻辑上讲,您无论如何都需要禁止它。
正是因为永远不需要复制单例,所以必须禁止该操作。否则就会出现困惑和错误:开发人员将在允许的情况下尝试使用它(并想知道哪里出了问题)。
好的设计可以最大限度地减少 WTF 的数量。
关于c++ - 为什么要在 C++ 中为单例类重载复制赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161977/