什麼是移動構造函數的正確方法?移動構造函數C++
class A{
...some stuff...
private:
int i;
std::string str;
};
A::A(A &&a)
{
*this = std::move(a);
};
或
A::A(A &&a)
{
this->str = std::move(a.str);
};
在第二種情況下,它是有用的爲std ::移動()int值?
什麼是移動構造函數的正確方法?移動構造函數C++
class A{
...some stuff...
private:
int i;
std::string str;
};
A::A(A &&a)
{
*this = std::move(a);
};
或
A::A(A &&a)
{
this->str = std::move(a.str);
};
在第二種情況下,它是有用的爲std ::移動()int值?
無論如何,我認爲你應該明確地設置int。此時,該值保持未初始化狀態。無論如何,在第一種情況下,您只需將移動構造函數重定向到copy/move-operator =(無論您實現哪個)。由於operator =在移動構造函數被聲明時被隱式刪除,所以會產生編譯錯誤。如果你實現移動賦值,我不認爲第一種情況是錯誤的,但它看起來類似於你是第二個移動構造函數。 – Herbert
第二個選項只移動字符串,而不是對象本身。 你想移動對象及其成員,還是想克隆它? 移動意味着「移動語義」,而後者意味着「克隆」。 –