0
我有這樣的代碼:C++ 11右值引用與與指針與「正常」的成員引用
class A{
};
class B{
B(A &&a) : a(std::move(a)){};
A a;
}
A a{};
B b{ std::move(a) };
// a is unusable
我用右值,因爲我不希望對象是複製版。
我想改變class B
使用引用的:
class A{
};
class B{
B(A &a) : a(a){};
A &a;
}
A a{};
B b{ a };
// a is usable
會不會有這樣的任何負面影響,除了活時的顧慮?我不重新分配a object
,所以我不需要指針。但我應該考慮它們嗎?
在你的第一個例子中,對象被複制了。你需要'B(A && a):a(std :: move(a)){}'。 – aschepler
當然。我將編輯 – Nick
可能不是問題,但現在'B'外部的代碼可以有效地修改'B'的狀態(通過修改':: a')。這原本是不可能的。現在必須爲'B :: a'的值在任何時候改變的可能性做好準備。 –