【发布时间】:2016-06-10 06:23:37
【问题描述】:
我有这样的代码:
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)) {}。 -
可能是也可能不是问题,但现在
B外部的代码可以有效地修改B的状态(通过修改::a)。这原本是不可能的。B现在必须为B::a的值随时变化的可能性做好准备。 -
另一个结果是不再生成隐式声明的 c-tors
标签: class pointers c++11 reference rvalue-reference