C++ 移动没有移动构造函数的类

C++ 移动没有移动构造函数的类,c++,c++11,move-semantics,move-constructor,C++,C++11,Move Semantics,Move Constructor,假设我有一个a类型的对象 如果我想将其移动到函数foo(a) 一个选项是执行foo(std::move(a)),这将调用move构造函数 但是,假设我正在使用一个我无法控制的类。如果我仍然想移动类型,这是否足够 std::unique_ptr<A> a_ptr(new A()); foo(std::move(a_ptr)); std::unique_ptr a_ptr(新的a()); foo(std::move(a_ptr)); 将foo更改为接受唯一的\u ptr 这两种方法不

假设我有一个a类型的对象

如果我想将其移动到函数
foo(a)

一个选项是执行
foo(std::move(a))
,这将调用move构造函数

但是,假设我正在使用一个我无法控制的类。如果我仍然想移动类型,这是否足够

std::unique_ptr<A> a_ptr(new A());
foo(std::move(a_ptr));
std::unique_ptr a_ptr(新的a());
foo(std::move(a_ptr));
foo
更改为接受唯一的\u ptr


这两种方法不是很相似吗(在第二种情况下使用智能指针的开销很小)?

不,使用这种语法可以移动唯一的指针,而不是对象。对象必须支持移动。但是,由于您可以使用指针,因此请避免移动并传递指针。开销是一个指针的单向(非常小)。开销是动态分配。可能的副本:第一个实例移动对象,第二个实例移动智能POTIN。如果编译器支持C++ 14,不使用RAW“新”操作符,使用STD::MaxIOIL更好(Said Herb Sutter,ISO C++ +Spring 2013会议)!是的,所以开销是动态分配+唯一ptr的一小部分开销。但最终结果是一样的,对吗?我设法避免复制对象A,对吗?是的,我知道指针正在移动。但是底层对象没有正确复制?那么,最终的结果不一样吗?