OpenCV笔记(Ptr)

//OpenCV中使用的智能指针。类似于std::smart_ptr,但是在OpenCV中可以用Ptr轻松管理各种类型的指针。
//可以用Ptr<MyObjectType> ptr代替MyObjectType* ptr,MyObjectType可以是C的结构体或C++的类,
//如果没有自动析构的函数,需要实现
//template<> void Ptr<MyObjectType>::delete_obj() { call_destructor_func(obj); }
//如果C++类中有析构函数,可以不用实现。
template<typename _Tp> class Ptr
{
public:
    //! empty constructor
    Ptr();
    //! take ownership of the pointer. The associated reference counter is allocated and set to 1
    Ptr(_Tp* _obj);
    //! calls release()
    ~Ptr();
    //! copy constructor. Copies the members and calls addref()
    Ptr(const Ptr& ptr);
    template<typename _Tp2> Ptr(const Ptr<_Tp2>& ptr);
    //! copy operator. Calls ptr.addref() and release() before copying the members
    Ptr& operator = (const Ptr& ptr);
    //! increments the reference counter
    void addref();
    //! decrements the reference counter. If it reaches 0, delete_obj() is called
    void release();
    //! deletes the object. Override if needed
    void delete_obj();
    //! returns true iff obj==NULL
    bool empty() const;
    //! cast pointer to another type
    template<typename _Tp2> Ptr<_Tp2> ptr();
    template<typename _Tp2> const Ptr<_Tp2> ptr() const;
    //! helper operators making "Ptr<T> ptr" use very similar to "T* ptr".
    _Tp* operator -> ();
    const _Tp* operator -> () const;
    operator _Tp* ();
    operator const _Tp*() const;
    _Tp* obj; //< the object pointer.
    int* refcount; //< the associated reference counter
};




posted @ 2014-04-24 10:50  fireae  阅读(7605)  评论(0编辑  收藏  举报