2015-09-04 54 views
0

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

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

+0

用你自己的话说,你对可分配对象的理解是什么,但不可复制?你想在这种情况下发生什么? – NoseKnowsAll

+0

你仍然会在右边复制这个东西,不是吗? – molbdnilo

回答

4

这将使一些像这样的代理副本:

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

这是非常不可能的,你不想拷贝构造,但拷贝赋值。移动分配当然是不同的处理,参见例如。 std::unique_ptr

辛格尔顿基本上是一样的。为什么允许自我分配?这只是没有意义。

+0

但在这种情况下'b = a'不是复制结构,对吧?如果它是'NotCopyable b = a;',那么我们会复制构造,对吧? – Narek

+0

@Narek正确。但是,预计效果如此相似,以至于如果没有其他效果,这种效果就没有意义。至少我无法想象一个现实的对象,这是有道理的。 –

+0

同意。我只是认为答案中的副本分配不是正确的术语。这只是和分配。 – Narek

1

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

在附注中,有很多例子是不可分配的,但可复制的。

0

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

相关问题