[英]c++ unique_ptr move constructor
在另一篇文章中提到,由于不同的删除器类型,这不起作用。
std::unique_ptr<char[]> ptr(nullptr);
std::unique_ptr<const char[]> ptr_2(std::move(ptr));
但是在VSS2013中没有解决方案来实现这种行为。 有人知道一个简短而干净的解决方案吗?
编辑::
std::unique_ptr<const char[]> ptr_2(ptr.release());
不起作用并编译错误:
error C2280: 'std::unique_ptr<const char [],std::default_delete<_Ty>>::unique_ptr<char*>(_Ptr2)' : attempting to reference a deleted function
1> with
1> [
1> _Ty=const char []
1> , _Ptr2=char *
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\memory(1612) : see declaration of 'std::unique_ptr<const char [],std::default_delete<_Ty>>::unique_ptr'
1> with
1> [
1> _Ty=const char []
1> ]
直接release
答案无法编译,因为Visual Studio将构造函数从另一个指针类型template<class _Ptr2> explicit unique_ptr(_Ptr2)
为private
因此您必须这样做:
std::unique_ptr<const char[]> ptr_2(const_cast<const char*>(ptr.release()));
使指针类型匹配。
当然,只需避免移动并手动执行:
std::unique_ptr<char[]> ptr(nullptr);
std::unique_ptr<const char[]> ptr_2(ptr.release());
你总是可以发布:
std::unique_ptr<const char[]> ptr_2(ptr.release());
但请务必添加注释,指出为什么简单的移动不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.