2015-09-04 56 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

複製構建和複製分配都被認爲是複製。

相關問題