pqxx::internal::PQAlloc< T > Class Template Reference

Reference-counted smart pointer to libpq-allocated object. More...

#include <util.hxx>

Inheritance diagram for pqxx::internal::PQAlloc< T >:

Inheritance graph
[legend]
List of all members.

Public Types

typedef T content_type

Public Member Functions

 PQAlloc () throw ()
 PQAlloc (const PQAlloc &rhs) throw ()
 ~PQAlloc () throw ()
PQAllocoperator= (const PQAlloc &rhs) throw ()
 PQAlloc (T *obj) throw ()
 Assume ownership of a pointer.
void swap (PQAlloc &rhs) throw ()
PQAllocoperator= (T *obj) throw ()
 operator bool () const throw ()
 Is this pointer non-null?
bool operator! () const throw ()
 Is this pointer null?
T * operator-> () const throw (PGSTD::logic_error)
 Dereference pointer.
T & operator * () const throw (PGSTD::logic_error)
 Dereference pointer.
T * c_ptr () const throw ()
 Obtain underlying pointer.
void clear () throw ()
template<>
void freemem () throw()
template<>
void freemem () throw()

Detailed Description

template<typename T>
class pqxx::internal::PQAlloc< T >

Reference-counted smart pointer to libpq-allocated object.

Keep track of a libpq-allocated object, and free it once all references to it have died.

If the available PostgreSQL development files supply PQfreemem() or PQfreeNotify(), this is used to free the memory. If not, free() is used instead. This matters on Windows, where memory allocated by a DLL must be freed by the same DLL.

Warning:
Copying, swapping, and destroying PQAlloc objects that refer to the same underlying libpq-allocated block is not thread-safe. If you wish to pass reference-counted objects around between threads, make sure that each of these operations is protected against concurrency with similar operations on the same object--or other copies of the same object.


Member Typedef Documentation

template<typename T>
typedef T pqxx::internal::PQAlloc< T >::content_type


Constructor & Destructor Documentation

template<typename T>
pqxx::internal::PQAlloc< T >::PQAlloc (  )  throw ()

template<typename T>
pqxx::internal::PQAlloc< T >::PQAlloc ( const PQAlloc< T > &  rhs  )  throw ()

template<typename T>
pqxx::internal::PQAlloc< T >::~PQAlloc (  )  throw ()

template<typename T>
pqxx::internal::PQAlloc< T >::PQAlloc ( T *  obj  )  throw () [explicit]

Assume ownership of a pointer.

Warning:
Don't to this more than once for a given object!


Member Function Documentation

template<typename T>
PQAlloc& pqxx::internal::PQAlloc< T >::operator= ( const PQAlloc< T > &  rhs  )  throw ()

template<typename T>
void pqxx::internal::PQAlloc< T >::swap ( PQAlloc< T > &  rhs  )  throw ()

template<typename T>
PQAlloc& pqxx::internal::PQAlloc< T >::operator= ( T *  obj  )  throw ()

template<typename T>
pqxx::internal::PQAlloc< T >::operator bool (  )  const throw ()

Is this pointer non-null?

template<typename T>
bool pqxx::internal::PQAlloc< T >::operator! (  )  const throw ()

Is this pointer null?

template<typename T>
T* pqxx::internal::PQAlloc< T >::operator-> (  )  const throw (PGSTD::logic_error)

Dereference pointer.

Throws a logic_error if the pointer is null.

template<typename T>
T& pqxx::internal::PQAlloc< T >::operator * (  )  const throw (PGSTD::logic_error)

Dereference pointer.

Throws a logic_error if the pointer is null.

template<typename T>
T* pqxx::internal::PQAlloc< T >::c_ptr (  )  const throw ()

Obtain underlying pointer.

Ownership of the pointer's memory remains with the PQAlloc object

Reimplemented in pqxx::binarystring.

template<typename T>
void pqxx::internal::PQAlloc< T >::clear (  )  throw ()

Reimplemented in pqxx::result.

template<>
void pqxx::internal::PQAlloc< result_data >::freemem (  )  throw()

template<>
void pqxx::internal::PQAlloc< pq::PGnotify >::freemem (  )  throw()


The documentation for this class was generated from the following file:
Generated on Thu Feb 1 17:12:40 2007 for libpqxx by  doxygen 1.5.1