понедельник, 21 мая 2007 г.

"Умный" указатель, или всё своё ношу с собой

Небольшая иллюстрация использования "умных" указателей (я использую boost::shared_ptr, вы можете выбрать любой другой, только не забывайте про то, как реализовано копирование в std::auto_ptr, и не пытайтесь использовать его в контейнерах STL).

template<typename T>
struct CPointerHolder
{
typedef boost::shared_ptr<T> CPtr;
virtual ~CPointerHolder() {}
};

Например, нам нужен список указателей на int:

typedef CPointerHolder<int> CInt;
typedef std::list<CInt::CPtr> CIntList;

Или сделать указатель частью произвольного типа и объявить массив таких указателей:

struct CType : public CPointerHolder<CType>
{
int i;
};

typedef std::vector<CType::CPtr> CTypeArray;

И так далее для любых типов.

Комментариев нет: