c++ - 为什么要在 C++ 中为单例类重载复制赋值运算符?

标签 c++ design-patterns

我知道为什么要使默认构造函数和复制构造函数私有(private)以在 C++ 中实现单例类。但我不明白的是,为什么要将复制赋值运算符设为私有(private),因为不会有两个现有对象开始。

我的探索带来了两点:

  1. 根据 Alexandrescu 在“现代 C++ 设计”中的说法,赋值 运营商将被私有(private)化以防止 self 分配。

  2. 其次,根据rule of three ,如果你定义了一个构造函数, 一个类的复制构造函数和赋值运算符,你应该定义 明确地所有三个。那么,是否需要遵守这条规则 仅。

那么,您对此有何看法?

最佳答案

我认为,禁止赋值更多是出于语义上的考虑:由于单例唯一,对其赋值没有任何意义。因此,即使在技术上什至可以以合理的方式实现赋值,从逻辑上讲,您无论如何都需要禁止它。

正是因为永远不需要复制单例,所以必须禁止该操作。否则就会出现困惑和错误:开发人员在允许的情况下尝试使用它(并想知道哪里出了问题)。

好的设计可以最大限度地减少 WTF 的数量。

关于c++ - 为什么要在 C++ 中为单例类重载复制赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161977/

相关文章:

java - 使用类的实例作为引用

c# - 耦合到依赖注入(inject)框架

oop - 函数式编程会取代 GoF 设计模式吗?

asp.net - 业务逻辑在MVC模式中属于什么位置

C++ 在代码中指定 header 包含目录

c# - 尝试反序列化 json 时无法在 JsonConvert 之后实现 Iterator 设计模式

c++ - std::vector 使结构排序变慢?由 小码哥发布于

C++ 类函数调用 fortran 子例程

c++ - 我如何确定哪个依赖项会导致 C++ 编译单元被重建?

c++ - av_read_frame 是否添加 FF_INPUT_BUFFER_PADDING_SIZE?