我用VC++ 2012運行下面的代碼:綁定右值,參考VC++的局部變量
#include <utility>
struct A
{
int* m_p;
A() { m_p = new int; }
~A() { delete m_p; }
A(const A& otherA)
{
m_p = new int;
// BOOM!
*m_p = *otherA.m_p;
}
};
A&& CreateA()
{
A a;
return std::move(a);
}
int _tmain(int argc, _TCHAR* argv[])
{
A a2 = CreateA();
return 0;
}
在創建A2 A的拷貝構造函數的調用 - 和崩潰,因爲在CreateA()中創建的源對象已被銷燬。 這是標準行爲嗎?這可能是一個編譯器錯誤?
請注意,如果將a2的類型從'A'更改爲'const A &',則不會發生崩潰 - 這增強了懷疑它確實是一個錯誤。 任何人都可以對此有所瞭解嗎?
注:我完全意識到這不是rvalue-refs的預期用法,並且此示例是人爲設計的。只是希望更好地掌握這種新型的行爲。
引用是一個引用,不管它是R還是L.並且你不能引用不存在的東西... –
可能的重複[可以請某人解釋移動語義給我?](http://stackoverflow.com/questions/3106110/can-someone-please-explain- move-semantics-to-me) – fredoverflow