Fixed missing counter increment in assign operator

This commit is contained in:
Norman Feske 2012-02-24 23:32:08 +01:00
parent 18d0b316d4
commit 7e7d290008
1 changed files with 9 additions and 3 deletions

View File

@ -82,13 +82,13 @@ namespace Noux {
{
private:
T *_ptr;
T *_ptr;
Genode::Allocator *_alloc;
void _dec_ref_count()
{
if (Shared_pointer_base::_dec_ref_count()) {
PDBG("ref count reached zero -> delete object");
PDBG("ref count for %p reached zero -> delete object", _ptr);
Genode::destroy(_alloc, _ptr);
_ptr = 0;
_alloc = 0;
@ -107,7 +107,9 @@ namespace Noux {
}
Shared_pointer(Shared_pointer const & from)
: Shared_pointer_base(from._ref_counter), _ptr(from._ptr), _alloc(from._alloc)
:
Shared_pointer_base(from._ref_counter),
_ptr(from._ptr), _alloc(from._alloc)
{
_inc_ref_count();
}
@ -118,12 +120,16 @@ namespace Noux {
if (_ptr == from._ptr)
return *this;
/* forget about original pointed-to object */
_dec_ref_count();
_ref_counter = from._ref_counter;
_ptr = from._ptr;
_alloc = from._alloc;
/* account for newly assigned pointed-to object */
_inc_ref_count();
return *this;
}