3

Boost.Move/other Boost ライブラリの助けを借りて転送セマンティクスを必要とする C++03 プロジェクトに取り組んでいます。プロジェクトの目標は、unique_ptr を C++11 に前方互換性のある方法で提供することです。

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