比方說,我得到了一個Foo
類,其中包含一個std::vector
類,它構造自std::unique_ptr
另一個類的對象,Bar
。爲什麼這需要一個明確的std :: move?
typedef std::unique_ptr<Bar> UniqueBar;
class Foo {
std::vector<UniqueBar> bars;
public:
void AddBar(UniqueBar&& bar);
};
void Foo::AddBar(UniqueBar&& bar) {
bars.push_back(bar);
}
這一個結果(以g ++ 4.8.1)編譯錯誤說的std::unique_ptr
的拷貝構造被刪除,這是合理的。這裏的問題是,由於bar參數已經是右值引用,爲什麼調用std::unique_ptr
的拷貝構造函數而不是其移動構造函數?
如果我明確地調用std::move
Foo::AddBar
那麼編譯問題就會消失,但我不明白爲什麼需要這樣做。我認爲這是相當多餘的。
那麼,我錯過了什麼?
此外,'的unique_ptr(常量的unique_ptr&)'被刪除。 – xis