因此,我们需要考虑一种“灵活”的指针,它的行为应该如同C++内建指针那样。另外,它还可以在适当的时候自动删除(解析)它所指向的对象。
copy_ptr是最简单的灵活指针。它在内部保留一个指针,当它自己解析时,它同时也销毁它在内部保存的这个指针。不过,由于不能让多个copy_ptr对象指向同一个对象(那样我们就不知道用哪个copy_ptr对象来删除它所指向的对象),copy_ptr不允许“拷贝——建立/赋值”操作。
copy_ptr的代码很简单:
template< class type>
class copy_ptr
{
copy_ptr( const copy_ptr< type> & other);
copy_ptr< type> & operator=( const copy_ptr< type> & other);
public:
copy_ptr( type * pType = NULL)
: m_pType( pType)
{}
~copy_ptr()
{ delete m_pType; }
type & operator*()
{ return *m_pType; }
const type & operator*() const
{ return *m_pType; }
type * operator->()
{ return m_pType; }
const type * operator->() const
{ return m_pType; }
private:
type * m_pType;
};