为什么要删除不可复制类型的operator=
Why to delete operator= for noncopyable type?
在这个问题中,解决方案是删除Copy CTOR和赋值操作符。我不明白为什么你需要禁用赋值操作符?它可以是不可复制的,但仍然可以转让,对吧?
在定义单例类时也会发生同样的事情。如果只有一个实例,为什么需要禁用分配?:)
这将允许像这样的代理复制:
NotCopyable a, b;
b = a; // Made a copy of a
你不需要拷贝构造,而需要拷贝赋值,这是很不可能的。移动赋值当然是另一种处理方式,例如std::unique_ptr
。
Singleton基本上是相同的。为什么允许自我赋值?
通常,不可复制的内容也不可分配。在现实生活中,复制是不允许的,而赋值是可以的,我很难想出这样的例子来。
顺便说一下,有很多例子是不可分配的,但可复制的。
复制构造和复制赋值都被认为是复制。
相关文章:
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 与'operator='不匹配(操作数类型'String'且"void")
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 错误:'operator>'不匹配(操作数类型为 'Student' 和 'Student'
- 与'operator<<'不匹配(操作数类型'std::ostream {aka std::basic_ostream<char>}'
- 与"operator<<"不匹配(操作数类型'std::ostream'
- 二进制'operator+' 'int*'和'int*'类型的无效操作数
- 无法将'Class::operator=='从"布尔"类型(类::)(类*)转换为"布尔"类型
- 为什么许多标准库类型在 C++20 中删除 operator!=?
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- 为什么C++不为枚举类型提供默认"operator>>"函数?
- 错误:与'operator='不匹配(操作数类型为 'PlDrustvo' 和"PlDrustvo")|
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- \main.cpp|103|error: 与"operator<<"不匹配(操作数类型为"std::ostream {aka std::basic_ostream<char&g
- 错误:二进制'operator*' 'int [1]'和'float'类型的操作数无效
- 有没有办法修复此错误:与'operator[]'不匹配(操作数类型为 'empl' 和"int")
- 错误:C++ 中二进制"operator%"类型"float"和"int"的操作数无效
- std::ostream&operator<<类型扣除
- 'char*'和'const char [2]'到二进制'operator+'类型的 C++ 无效操作数