【发布时间】:2015-12-15 04:27:21
【问题描述】:
我正在阅读 C++11 中的移动语义,现在我正在尝试了解移动构造函数的实现。假设我们有以下类:
struct A {
A(){ }
virtual ~A(){ }
A(const A&&){ }
};
struct B{
int i;
A a;
virtual ~B(){ }
B(const B&& b){
i = b.i;
i = 0;
//How to move a??
}
};
我的问题是如何在B 的一个体内调用A 的移动构造函数?我会使用std::swap,但在寻找它时我发现了一些description。参数是 lvalue 引用类型,因此它与移动语义无关。怎么办?
【问题讨论】:
-
为什么要通过 const rvalue 引用来获取对象?
-
i = 0;应该被删除 -
@M.M 为什么?你不能解释一下吗?我认为我们应该删除所有源代码。
-
i是目的地。也许您的意思是b.i = 0;来“擦除”源。但是,除非它对B的逻辑状态很重要,否则这不是必需的 -
@M.M 是的,完全正确。我的意思是
b.i = 0。那么为什么没有必要呢?我认为,如果我们不将其设置为 0,它就不会移动。
标签: c++ c++11 move-semantics