Language

The Free and Open Productivity Suite
Released: Apache OpenOffice 4.1.15

API

SDK

Tips ‘n’ Tricks

Miscellaneous


:: salhelper ::

class SimpleReferenceObject


Base Classes
None.
Known Derived Classes
None.

virtual abstract interface template
YES NO NO NO
Summary
A simple base implementation for reference-counted objects.
Description
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 declare and not define (private) operators new[] and delete[].
File
simplereferenceobject.hxx

Public Members

Methods


SimpleReferenceObject( ) throw( );
void
acquire( ) throw( );
void
release( ) throw( );

Static Methods

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

Protected Members

Methods

virtual
~SimpleReferenceObject( ) throw( );

Private Members

Data

oslInterlockedCount m_nCount;

Top of Page

Apache Software Foundation

Copyright & License | Privacy | Contact Us | Donate | Thanks

Apache, OpenOffice, OpenOffice.org and the seagull logo are registered trademarks of The Apache Software Foundation. The Apache feather logo is a trademark of The Apache Software Foundation. Other names appearing on the site may be trademarks of their respective owners.