我很困惑移動構造函數被調用時與複製構造函數。 我讀過以下來源:何時移動構造函數被調用?
Move constructor is not getting called in C++0x
Move semantics and rvalue references in C++11
所有這些來源要麼過於複雜(我只想要一個簡單的例子),或者只顯示如何編寫移動構造函數,而不是如何調用它。我寫了一個簡單的問題更具體:
const class noConstruct{}NoConstruct;
class a
{
private:
int *Array;
public:
a();
a(noConstruct);
a(const a&);
a& operator=(const a&);
a(a&&);
a& operator=(a&&);
~a();
};
a::a()
{
Array=new int[5]{1,2,3,4,5};
}
a::a(noConstruct Parameter)
{
Array=nullptr;
}
a::a(const a& Old): Array(Old.Array)
{
}
a& a::operator=(const a&Old)
{
delete[] Array;
Array=new int[5];
for (int i=0;i!=5;i++)
{
Array[i]=Old.Array[i];
}
return *this;
}
a::a(a&&Old)
{
Array=Old.Array;
Old.Array=nullptr;
}
a& a::operator=(a&&Old)
{
Array=Old.Array;
Old.Array=nullptr;
return *this;
}
a::~a()
{
delete[] Array;
}
int main()
{
a A(NoConstruct),B(NoConstruct),C;
A=C;
B=C;
}
當前A,B和C都有不同的指針值。我希望A有一個新的指針,B有C的舊指針,C有一個空指針。
有點偏離主題,但如果有人可以建議一個文檔,我可以詳細瞭解這些新功能,我將不勝感激,可能不需要問更多的問題。
在部分相關的問題,你可能要檢查的複製和交換成語http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom您assignement運營商。 – undu
[相關FAQ](http:// stackoverflow。com/questions/3106110 /) – fredoverflow