C++ 为什么要删除不可复制类型的运算符=?

C++ 为什么要删除不可复制类型的运算符=?,c++,c++11,C++,C++11,解决方案是删除复制运算符和赋值运算符。我不明白你为什么要禁用赋值运算符?它可以是不可复制的,但仍然是可分配的,对吗 定义单例类时也会发生同样的情况。如果只有一个实例,为什么需要禁用分配?:) 通常,不可复制的东西也不可分配。我很难发明一个现实生活中的例子,不允许复制,但分配是可以的 另一方面,有很多例子表明某些东西是不可转让的,但可复制的。通常,不可复制的东西也不可转让。我很难发明一个现实生活中的例子,不允许复制,但分配是可以的 另一方面,有很多例子表明某些东西是不可转让的,但可复制的。这将允许

解决方案是删除复制运算符和赋值运算符。我不明白你为什么要禁用赋值运算符?它可以是不可复制的,但仍然是可分配的,对吗


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

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


另一方面,有很多例子表明某些东西是不可转让的,但可复制的。

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


另一方面,有很多例子表明某些东西是不可转让的,但可复制的。

这将允许像这样的代理复制:

NotCopyable a, b;
b = a; // Made a copy of a
您不希望复制构造,而希望复制分配,这是非常不可能的。移动任务当然是另一种交易,请参见例如
std::unique\u ptr


单身基本上是一样的。为什么允许自我分配?这是没有意义的。

这将允许像这样的代理副本:

NotCopyable a, b;
b = a; // Made a copy of a
您不希望复制构造,而希望复制分配,这是非常不可能的。移动任务当然是另一种交易,请参见例如
std::unique\u ptr


单身基本上是一样的。为什么允许自我分配?这根本没有意义。

复制构造和复制分配都被认为是复制。

复制构造和复制分配都被认为是复制。

用你自己的话来说,你对可分配但不可复制的对象的理解是什么?在这种情况下,你希望发生什么?你仍然会复制右边的东西,不是吗?用你自己的话来说,你对一个可分配但不可复制的对象的理解是什么?在这种情况下,您希望发生什么?您仍然会复制右侧的内容,不是吗?但是在这种情况下,
b=a
不是复制构造,对吗?如果它是
不可复制的b=a,我们会复制结构,对吗?@Narek正确。但预期的效果是如此相似,以至于一个没有另一个就没有意义。至少我不能想象一个现实的物体,在那里这是有意义的。我只是认为答案中的复制作业不是正确的术语。事实上,“Nealk”实际上是“复制赋值操作符”,是C++标准用于某些成员的代码> A&运算符=(const a &);部分
A类
,以及
A=b在我的示例中,如果调用复制赋值操作符,则称为复制赋值。(标准允许它采用几种不同的形式,但以上是最常见的形式。)好的,谢谢。我想我需要检查一下为什么标准调用复制赋值而不是赋值。但是在这种情况下,
b=a
不是复制构造,对吗?如果它是
不可复制的b=a,我们会复制结构,对吗?@Narek正确。但预期的效果是如此相似,以至于一个没有另一个就没有意义。至少我不能想象一个现实的物体,在那里这是有意义的。我只是认为答案中的复制作业不是正确的术语。事实上,“Nealk”实际上是“复制赋值操作符”,是C++标准用于某些成员的代码> A&运算符=(const a &);部分
A类
,以及
A=b在我的示例中,如果调用复制赋值操作符,则称为复制赋值。(标准允许它采用几种不同的形式,但以上是最常见的形式。)好的,谢谢。我想我需要检查一下为什么standard调用copy assignment而不是assignment。