cv::Ptr< _Tp > Class Template Reference

Smart pointer to dynamically allocated objects. More...

#include <core.hpp>

List of all members.

Public Member Functions

 Ptr ()
 empty constructor
 Ptr (_Tp *_obj)
 take ownership of the pointer. The associated reference counter is allocated and set to 1
 ~Ptr ()
 calls release()
 Ptr (const Ptr &ptr)
 copy constructor. Copies the members and calls addref()
Ptroperator= (const Ptr &ptr)
 copy operator. Calls ptr.addref() and release() before copying the members
void addref ()
 increments the reference counter
void release ()
 decrements the reference counter. If it reaches 0, delete_obj() is called
void delete_obj ()
 deletes the object. Override if needed
bool empty () const
 returns true iff obj==NULL
_Tp * operator-> ()
 helper operators making "Ptr<T> ptr" use very similar to "T* ptr".
const _Tp * operator-> () const
 operator _Tp * ()
 operator const _Tp * () const
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
void CV_EXPORTS delete_obj ()
template<>
void CV_EXPORTS delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()
template<>
CV_EXPORTS void delete_obj ()

Protected Attributes

_Tp * obj
int * refcount

Detailed Description

template<typename _Tp>
class cv::Ptr< _Tp >

Smart pointer to dynamically allocated objects.

This is template pointer-wrapping class that stores the associated reference counter along with the object pointer. The class is similar to std::smart_ptr<> from the recent addons to the C++ standard, but is shorter to write :) and self-contained (i.e. does add any dependency on the compiler or an external library).

Basically, you can use "Ptr<MyObjectType> ptr" (or faster "const Ptr<MyObjectType>& ptr" for read-only access) everywhere instead of "MyObjectType* ptr", where MyObjectType is some C structure or a C++ class. To make it all work, you need to specialize Ptr<>::delete_obj(), like:

  template<> void Ptr<MyObjectType>::delete_obj() { call_destructor_func(obj); }
Note:
{if MyObjectType is a C++ class with a destructor, you do not need to specialize delete_obj(), since the default implementation calls "delete obj;"}
{Another good property of the class is that the operations on the reference counter are atomic, i.e. it is safe to use the class in multi-threaded applications}

Constructor & Destructor Documentation

template<typename _Tp >
cv::Ptr< _Tp >::Ptr (  ) 

empty constructor

template<typename _Tp>
cv::Ptr< _Tp >::Ptr ( _Tp *  _obj  ) 

take ownership of the pointer. The associated reference counter is allocated and set to 1

template<typename _Tp >
cv::Ptr< _Tp >::~Ptr (  ) 

calls release()

template<typename _Tp>
cv::Ptr< _Tp >::Ptr ( const Ptr< _Tp > &  ptr  ) 

copy constructor. Copies the members and calls addref()


Member Function Documentation

template<typename _Tp >
Ptr< _Tp > & cv::Ptr< _Tp >::operator= ( const Ptr< _Tp > &  ptr  ) 

copy operator. Calls ptr.addref() and release() before copying the members

template<typename _Tp >
void cv::Ptr< _Tp >::addref (  ) 

increments the reference counter

template<typename _Tp >
void cv::Ptr< _Tp >::release (  ) 

decrements the reference counter. If it reaches 0, delete_obj() is called

template<typename _Tp >
void cv::Ptr< _Tp >::delete_obj (  ) 

deletes the object. Override if needed

template<typename _Tp >
bool cv::Ptr< _Tp >::empty (  )  const

returns true iff obj==NULL

template<typename _Tp >
_Tp * cv::Ptr< _Tp >::operator-> (  ) 

helper operators making "Ptr<T> ptr" use very similar to "T* ptr".

template<typename _Tp >
const _Tp * cv::Ptr< _Tp >::operator-> (  )  const
template<typename _Tp >
cv::Ptr< _Tp >::operator _Tp * (  ) 
template<typename _Tp >
cv::Ptr< _Tp >::operator const _Tp * (  )  const
template<>
CV_EXPORTS void cv::Ptr< CvStereoBMState >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvMat >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< IplImage >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvMatND >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvSparseMat >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvMemStorage >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvFileStorage >::delete_obj (  ) 
template<>
void CV_EXPORTS cv::Ptr< CvCapture >::delete_obj (  ) 
template<>
void CV_EXPORTS cv::Ptr< CvVideoWriter >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< IplConvKernel >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvHistogram >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvDTreeSplit >::delete_obj (  ) 
template<>
CV_EXPORTS void cv::Ptr< CvHaarClassifierCascade >::delete_obj (  ) 

Member Data Documentation

template<typename _Tp>
_Tp* cv::Ptr< _Tp >::obj [protected]
template<typename _Tp>
int* cv::Ptr< _Tp >::refcount [protected]

The documentation for this class was generated from the following files: