针对unique_ptr实现的C ++ 03转发变通方法

时间:2013-08-03 22:42:41

标签: c++ boost perfect-forwarding boost-move

我正在开发一个C ++ 03项目,该项目需要在Boost.Move /其他Boost库的帮助下转发语义。该项目的目标是以向前兼容的方式向C ++ 11提供unique_ptr。

C ++ 11标准需要以下构造函数:

template<class U, class E>
unique_ptr(unique_ptr<U,E>&& u)

从u传输存储的数据(基本上是ptr_val = u.release()),并将:

  • 如果E是引用类型,请将u的删除器复制到* this。
  • 否则,将你的删除器移动到* this。

在测试中,此代码似乎“有效”:

// data fields: pointer ptr; delete_type del;
// only used if compiler doesn't support rvalue-refs
#define BOOST_COMMA ,

template<typename U, typename E>
unique_ptr(BOOST_RV_REF(unique_ptr<U BOOST_COMMA E>) u) : ptr(u.release()), del(boost::move(u.del))
{}

template<typename U, typename E>
unique_ptr(BOOST_RV_REF(unique_ptr<U BOOST_COMMA E&>) u) : ptr(u.release()), del(u.del)
{}

template<typename U, typename E>
unique_ptr(BOOST_RV_REF(unique_ptr<U BOOST_COMMA const E&>) u) : ptr(u.release()), del(u.del)
{}

是否有任何重要的角落案件无法覆盖?

0 个答案:

没有答案