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[].