Dan*_*nra 9 c++ move unique-ptr c++11
通常什么是转发std :: unique_ptr的正确方法?
下面的代码使用std::move,我认为这是考虑的做法,但它与clang崩溃.
class C {
int x;
}
unique_ptr<C> transform1(unique_ptr<C> p) {
return transform2(move(p), p->x); // <--- Oops! could access p after move construction takes place, compiler-dependant
}
unique_ptr<C> transform2(unique_ptr<C> p, int val) {
p->x *= val;
return p;
}
Run Code Online (Sandbox Code Playgroud)
是否有更强大的约定,而不仅仅是确保p在将所有权转移到下一个功能之前获得所需的一切std::move?在我看来,move在一个对象上使用并访问它以向同一函数调用提供参数可能是一个常见的错误.
因为p在移动之后你真的不需要访问,所以一种方法是p->x在移动之前获取然后使用它.
例:
unique_ptr<C> transform1(unique_ptr<C> p) {
int x = p->x;
return transform2(move(p), x);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |