www.pudn.com > 99273898StereoMatch_1_0.zip > RefCntMem.h
///////////////////////////////////////////////////////////////////////////
//
// NAME
// RefCntMem.h -- reference-counted heap memory
//
// DESCRIPTION
// The CRefCntMem class is used to manage reference-counted
// dynamically allocatable memory. This memory can be shared
// across many instances of the class object, provided they
// were created from each other through copy construction or assignment.
//
// Using the class in a large memory object class such as CImage allows
// the including class to achieve a similar kind of memory sharing as
// is found in garbage collected languages such as Java and C#.
//
// SEE ALSO
// RefCntMem.cpp implementation
// Image.h class that uses a CRefCntMem object
//
// Copyright © Richard Szeliski, 2001.
// See Copyright.h for more details
//
///////////////////////////////////////////////////////////////////////////
struct CRefCntMemPtr // shared component of reference counted memory
{
void *m_memory; // allocated memory
int m_refCnt; // reference count
int m_nBytes; // number of bytes
bool m_deleteWhenDone; // delete memory when ref-count drops to 0
void (*m_delFn)(void *ptr); // optional delete function
};
class CRefCntMem // reference-counted memory allocator
{
public:
CRefCntMem(void); // default constructor
CRefCntMem(const CRefCntMem& ref); // copy constructor
~CRefCntMem(void); // destructor
CRefCntMem& operator=(const CRefCntMem& ref); // assignment
void ReAllocate(int nBytes, void *memory, bool deleteWhenDone,
void (*deleteFunction)(void *ptr) = 0);
// allocate/deallocate memory
int NBytes(void); // number of stored bytes
bool InBounds(int i); // check if index is in bounds
void* Memory(void); // pointer to allocated memory
private:
void DecrementCount(void); // decrement the reference count and delete if done
void IncrementCount(void); // increment the reference count
CRefCntMemPtr *m_ptr; // shared reference-counted memory pointer
};