diff --git a/inc/ManagedType.h b/inc/ManagedType.h index ad28fbd..b43a511 100644 --- a/inc/ManagedType.h +++ b/inc/ManagedType.h @@ -136,7 +136,16 @@ ManagedType::ManagedType(const ManagedType &t) template ManagedType::~ManagedType() { - if (--(*ref) == 0) + // Special case - we were created using a default constructor, and never assigned a value. + if (*ref == 0) + { + // Simply destroy our reference counter and we're done. + free(ref); + } + + // Normal case - we have a valid piece of data. + // Decrement our reference counter and free all allocated memory if we're deleting the last reference. + else if (--(*ref) == 0) { delete object; free(ref); @@ -152,7 +161,14 @@ ManagedType& ManagedType::operator = (const ManagedType&t) if (this == &t) return *this; - if (--(*ref) == 0) + // Special case - we were created using a default constructor, and never assigned a value. + if (*ref == 0) + { + // Simply destroy our reference counter, as we're about to adopt another. + free(ref); + } + + else if (--(*ref) == 0) { delete object; free(ref);