1
我是新來移動構造函數,並與VS2010的行爲相當混淆。 我設計了一個移動構造函數(A類),這在我的知識是這樣的:在VS2010中移動構造函數,非const拷貝構造函數,列表的emplace
A(A&& input) {some code}
當我使用列表的佈設,並把A類的一個實例:
mylist.emplace(a);
我的移動構造函數是不叫,和一個非常拷貝構造函數被調用來代替:當我做這個
A(A& input) {the same code as move constructor}
在另一方面:
mylist.emplace(A(2));
我的移動構造函數被稱爲它應該的。所以,我的問題是:
- 爲什麼列表的emplace調用我的非const拷貝構造函數而不是我的移動構造函數?
- 非const拷貝構造函數實際上是定義移動構造函數的替代方法嗎?
- 此行爲是否正確(對於C++ 0x編譯器)還是隻是VS2010的行爲?
非常感謝大家。
如果您的拷貝構造函數與您的移動構造函數具有相同的行爲,是不是嚴重破壞了類? – UncleBens 2010-12-15 21:37:30
@UncleBens:不一定,兩者都可以做一個副本。 – ybungalobill 2010-12-15 21:38:24
@ybungalobill:在這種情況下,爲什麼要定義(而不是禁用)移動構造函數?如果複製構造函數創建一個副本,爲什麼它需要一個非const引用? – UncleBens 2010-12-15 22:00:10