为什么删除operator = for noncopyable type?

时间:2015-09-04 15:02:47

标签: c++ c++11

In this question解决方法是删除Copy CTOR和赋值运算符。我不明白为什么你需要禁用赋值运算符?它可以是不可复制的,但仍可分配,对吧?

定义单例类时会发生同样的事情。如果只有一个实例,为什么需要禁用赋值? :)

3 个答案:

答案 0 :(得分:4)

这将允许某种类似的代理副本:

NotCopyable a, b;
b = a; // Made a copy of a

您不太可能不想复制构造,而是复制分配。移动任务当然是一个不同的交易,参见例如std::unique_ptr

Singleton基本相同。为什么允许自我分配?这没有意义。

答案 1 :(得分:1)

通常,不可复制的东西也不可分配。我很难发明一个不允许复制的现实例子,但分配是可以的。

在旁注中,有很多例子可以说是不可转让的,但是可以复制。

答案 2 :(得分:0)

复制构造和复制分配都被视为复制。