3

我正在开发一个 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。
  • 否则,将 u 的删除器移动到 *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)
{}

是否有任何重要的角落案例不包括在内?

4

0 回答 0