LibreOffice Module salhelper (master) 1
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | List of all members
salhelper::SimpleReferenceObject Class Reference

A simple base implementation for reference-counted objects. More...

#include <simplereferenceobject.hxx>

Inheritance diagram for salhelper::SimpleReferenceObject:
[legend]

Public Member Functions

 SimpleReferenceObject ()
 
void acquire ()
 
void release ()
 

Static Public Member Functions

static void * operator new (std::size_t nSize)
 see general class documentation More...
 
static void * operator new (std::size_t nSize, std::nothrow_t const &rNothrow)
 see general class documentation More...
 
static void operator delete (void *pPtr)
 see general class documentation More...
 
static void operator delete (void *pPtr, std::nothrow_t const &rNothrow)
 see general class documentation More...
 

Protected Member Functions

virtual ~SimpleReferenceObject () COVERITY_NOEXCEPT_FALSE
 

Protected Attributes

oslInterlockedCount m_nCount
 

Private Member Functions

 SimpleReferenceObject (SimpleReferenceObject &) SAL_DELETED_FUNCTION
 not implemented More...
 
void operator= (SimpleReferenceObject) SAL_DELETED_FUNCTION
 not implemented More...
 

Static Private Member Functions

static void * operator new[] (std::size_t) SAL_DELETED_FUNCTION
 see general class documentation More...
 
static void operator delete[] (void *pPtr) SAL_DELETED_FUNCTION
 see general class documentation More...
 

Detailed Description

A simple base implementation for reference-counted objects.

Classes that want to implement a reference-counting mechanism based on the acquire()/release() interface should derive from this class.

The reason to have class local operators new and delete here is technical. Imagine a class D derived from SimpleReferenceObject, but implemented in another shared library that happens to use different global operators new and delete from those used in this shared library (which, sadly, seems to be possible with shared libraries). Now, without the class local operators new and delete here, a code sequence like "new D" would use the global operator new as found in the other shared library, while the code sequence "delete this" in release() would use the global operator delete as found in this shared library—and these two operators would not be guaranteed to match.

There are no overloaded operators new and delete for placement new here, because it is felt that the concept of placement new does not work well with the concept of reference-counted objects; so it seems best to simply leave those operators out.

The same problem as with operators new and delete would also be there with operators new[] and delete[]. But since arrays of reference-counted objects are of no use, anyway, it seems best to simply define operators new[] and delete[] as deleted.

Definition at line 61 of file simplereferenceobject.hxx.

Constructor & Destructor Documentation

◆ SimpleReferenceObject() [1/2]

salhelper::SimpleReferenceObject::SimpleReferenceObject ( )
inline

Definition at line 64 of file simplereferenceobject.hxx.

References m_nCount.

◆ ~SimpleReferenceObject()

SimpleReferenceObject::~SimpleReferenceObject ( )
protectedvirtual

Definition at line 27 of file simplereferenceobject.cxx.

References m_nCount.

◆ SimpleReferenceObject() [2/2]

salhelper::SimpleReferenceObject::SimpleReferenceObject ( SimpleReferenceObject )
private

not implemented

Member Function Documentation

◆ acquire()

void salhelper::SimpleReferenceObject::acquire ( )
inline
Attention: \n
The results are undefined if, for any individual instance of SimpleReferenceObject, the total number of calls to acquire() exceeds the total number of calls to release() by a platform dependent amount (which, hopefully, is quite large).

Definition at line 72 of file simplereferenceobject.hxx.

References m_nCount.

Referenced by salhelper::TimerManager::checkForTimeout().

◆ operator delete() [1/2]

void SimpleReferenceObject::operator delete ( void *  pPtr)
static

see general class documentation

Definition at line 48 of file simplereferenceobject.cxx.

◆ operator delete() [2/2]

void SimpleReferenceObject::operator delete ( void *  pPtr,
std::nothrow_t const &  rNothrow 
)
static

see general class documentation

Definition at line 53 of file simplereferenceobject.cxx.

◆ operator delete[]()

static void salhelper::SimpleReferenceObject::operator delete[] ( void *  pPtr)
staticprivate

see general class documentation

◆ operator new() [1/2]

void * SimpleReferenceObject::operator new ( std::size_t  nSize)
static

see general class documentation

Definition at line 32 of file simplereferenceobject.cxx.

◆ operator new() [2/2]

void * SimpleReferenceObject::operator new ( std::size_t  nSize,
std::nothrow_t const &  rNothrow 
)
static

see general class documentation

Definition at line 37 of file simplereferenceobject.cxx.

◆ operator new[]()

static void * salhelper::SimpleReferenceObject::operator new[] ( std::size_t  )
staticprivate

see general class documentation

◆ operator=()

void salhelper::SimpleReferenceObject::operator= ( SimpleReferenceObject  )
private

not implemented

◆ release()

void salhelper::SimpleReferenceObject::release ( )
inline

Definition at line 75 of file simplereferenceobject.hxx.

References m_nCount.

Referenced by salhelper::TimerManager::checkForTimeout().

Member Data Documentation

◆ m_nCount

oslInterlockedCount salhelper::SimpleReferenceObject::m_nCount
protected

Definition at line 98 of file simplereferenceobject.hxx.

Referenced by ~SimpleReferenceObject().


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