【发布时间】:2018-07-24 15:28:00
【问题描述】:
假设我有以下课程:
class foo {
std::unique_ptr<blah> ptr;
}
这两者有什么区别:
foo::foo(unique_ptr p)
: ptr(std::move(p))
{ }
和
foo::foo(unique_ptr&& p)
: ptr(std::move(p)
{ }
当被调用时
auto p = make_unique<blah>();
foo f(std::move(p));
两者都编译,我猜两者都必须使用unique_ptr 的移动构造函数?我猜第一个它会被移动两次,但第二个它只会被移动一次?
【问题讨论】:
-
std::move 是一个简单的右值转换,它实际上并没有在后面做任何事情
-
这能回答你的问题吗? stackoverflow.com/q/8114276/241631你说得对,第二个有2个动作,一个用于构造参数,然后用于构造数据成员。
标签: c++ c++11 move-semantics