Обход пересылки C ++ 03 для реализации unique_ptr

Я работаю над проектом C ++ 03, который требует пересылки семантики с помощью Boost.Move / других библиотек Boost. Цель проекта — предоставить unique_ptr совместимым образом с C ++ 11.

Стандарт C ++ 11 требует следующего конструктора:

template<class U, class E>
unique_ptr(unique_ptr<U,E>&& 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)
{}

Есть ли какие-нибудь важные дела, которые это не касается?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …