我有这样的代码:
class A{
};
class B{
B(A &&a) : a(std::move(a)){};
A a;
}
A a{};
B b{ std::move(a) };
// a is unusable
我使用rvalue,因为我不希望对象被复制。
我正在考虑将class B
更改为使用引用:
class A{
};
class B{
B(A &a) : a(a){};
A &a;
}
A a{};
B b{ a };
// a is usable
除了实时问题外,是否会产生任何负面影响?我没有重新分配a object
,所以我不需要指针。但我应该考虑一下吗?
答案 0 :(得分:1)
为什么不让调用者决定是移动还是复制其A
对象?
class A {};
class B {
public:
B(A a_param) : a(std::move(a_param)) {}
private:
A a;
};
void f1() {
A a;
B b{a}; // Makes a copy, a is still usable.
}
void f2() {
A a;
B b{std::move(a)}; // Does a move, a is not usable.
}
void f3() {
B b{A{}}; // Does a move of the temporary object.
}