Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] auto_ptr, оператор присваивания и конструктор копирования 23.03.09 12:37 Число просмотров: 3426
Автор: Heller <Heller> Статус: Elderman
|
Решил реализовать свой собственный auto_ptr в качестве упражнения (ибо я не большой спец по C++, поэтому решил начать с малого). Сразу возникли непонятные моменты.
Моя реализация:
template<typename T>
class auto_ptr
{
T *object;
public:
explicit auto_ptr(T *p = 0) : object(p) {}
template<typename K>
auto_ptr(auto_ptr<K> &p) : object(static_cast<T*>(p.release()))
{
}
template<typename K>
auto_ptr& operator=(auto_ptr<K> &p)
{
object = static_cast<T*>(p.release());
return *this;
}
auto_ptr& operator=(auto_ptr &p)
{
object = p.release();
return *this;
}
~auto_ptr()
{
delete object;
}
T& operator*() const {return *object;}
T* operator->() const {return object;}
T* release() {T* t = object; object = 0; return t;}
void reset() {delete object; object = 0;}
};
---
Я не вижу никаких особых недостатков моего подхода. Однако я смотрю на реализацию в STL и не понимаю - зачем им auto_ptr_ref? Просто не вижу в нем смысла. Буду признателен, если кто-либо мне это объяснит.
Так же по ходу реализации auto_ptr возникли непонятности с оператором присваивания и конструктором копирования. Как видно из кода, мне пришлось реализовывать два оператора присваивания - теплейтный и «обычный». Это связано с тем, что компилятор (VC++ 2005 - если в новых версиях это иначе, прошу сообщить) генерит дефолтовый operator=, и игнорирует мой темплейт. Это вполне есественно - зачем инстанцировать темплейт, когда уже определена конкретная функция? Однако возникает непонятка: почему же он тогда инстанцирует темплейтный копирующий конструктор, а не использует сгенерированный дефолтовый, ведь и тот и другой генерируются по умолчанию?
В общем, я лично в замешательсве.
|
- [C++] auto_ptr, оператор присваивания и конструкто... - Heller 23.03.09 12:37 [3426]
|
|
|