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
};





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM