C++技巧:简单而又灵活的指针-copy_ptr和clone_ptr(一)

ZDNet软件频道 时间:2003-01-06 作者:BUILDER.COM |  我要评论()
本文关键词:cpptips
保留一个未经进一步处理的指针是很麻烦的,因为你不得不显式的构造和解析指针所指向的对象。因此,我们需要考虑一种“灵活”的指针,它的行为应该如同C++内建指针那样。另外,它还可以在适当的时候自动删除(解析)它所指向的对象。
当处理类的继承关系时,开发者往往不得不保留一个指向基类的指针。保留一个未经进一步处理的指针是很麻烦的,因为你不得不显式的构造和解析指针所指向的对象。

因此,我们需要考虑一种“灵活”的指针,它的行为应该如同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;
};

在本文的第二部分,我们将讨论另一种灵活指针:clone_ptr

责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134