【发布时间】:2013-12-27 08:56:02
【问题描述】:
对具有引用成员变量的类进行复制分配是禁忌,因为您无法重新分配引用。但是移动分配呢?我只是简单地尝试了moveing 它,但是当我只想移动引用本身时,这当然会破坏源对象:
class C
{
public:
C(X& x) : x_(x) {}
C(C&& other) : x_(std::move(other.x_)) {}
C& operator=(C&& other)
{
x_ = std::move(other.x_);
}
private:
X& x_;
};
X y;
C c1(y);
X z;
C c2(z);
c2 = c1; // destroys y as well as z
我不应该只实施移动分配并坚持移动构造吗?这使得swap(C&, C&) 难以实现。
【问题讨论】:
-
一般来说,如果一个人想用引用做一些不平凡的事情,难道不会使用
reference_wrapper<T>并完成它吗?我敢肯定,如果不是微不足道的话,移动构造函数和赋值就会变得微不足道(注意不是trivial)。 -
@LuisMachuca 这似乎有效。如果您将其添加为答案,我会投票赞成。谢谢。
-
你有点错过
x_的声明... -
@ildjarn 哎呀!现在修好了。谢谢。
-
@thehouse - 注意到并完成,谢谢。
标签: c++ c++11 move-semantics