Re: В std::auto_ptr определен лишний метод?
От: dmitry.maystrenco  
Дата: 30.01.09 17:07
Оценка:
Здравствуйте, NightWind, Вы писали:

NW>Здравствуйте!

NW>Посмотрел я на каноническое определение std::auto_ptr [20.4.5]:
NW>
NW>namespace std {
NW>   template <class Y> struct auto_ptr_ref {};
   
NW>   template<class X> class auto_ptr {
NW>   public:
NW>      typedef X element_type;
NW>      // 20.4.5.1 construct/copy/destroy:
NW>      explicit auto_ptr(X* p =0) throw();
NW>      auto_ptr(auto_ptr&) throw();
NW>      template<class Y> auto_ptr(auto_ptr<Y>&) throw();
NW>      auto_ptr& operator=(auto_ptr&) throw();
NW>      template<class Y> auto_ptr& operator=(auto_ptr<Y>&) throw();
NW>      auto_ptr& operator=(auto_ptr_ref<X> r) throw();
NW>      ~auto_ptr() throw();
NW>      // 20.4.5.2 members:
NW>      X& operator*() const throw();
NW>      X* operator->() const throw();
NW>      X* get() const throw();
NW>      X* release() throw();
NW>      void reset(X* p =0) throw();
NW>      // 20.4.5.3 conversions:
NW>      auto_ptr(auto_ptr_ref<X>) throw();
NW>      template<class Y> operator auto_ptr_ref<Y>() throw();
NW>      template<class Y> operator auto_ptr<Y>() throw();
NW>};
NW>}
NW>

NW>и не смог понять зачем нужен следующий метод:
NW>
NW>template<class Y> operator auto_ptr<Y>() throw();
NW>


NW>Приведите, пожалуйста, пример, который перестаёт компилироваться (работать) если этот метод убрать.

NW>Заранее благодарен.

На счет примера, трудно предложить, а идея этого оператора, достаточна проста, если обрать внимание, то очень многие классы STL изобилуют в той или иной мере такой конструкцией, в шаблонных классах заложена архитектура автоматической специализации если в качеcтве приемника или источника выступает близкий по сигнатуре класс, например был изначально std::auto_ptr<int> а мы его присвоим std::auto_ptr<long>, для нас разницы нет, для компилятора разница сушественная, если потребитель кода будет специализировать класс, например
template<> auto_ptr<long> auto_ptr<int>::operator auto_ptr<long>()
...

в этом случае он сможете определить особенное поведение класса auto_ptr для особенных случаев
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.