diff --git a/src/object/object.cpp b/src/object/object.cpp index 4d83a7b54..c2f5967a2 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -16,12 +16,15 @@ * along with this program. If not, see . */ +#include "logger/logger.h" #include "object-p.h" #include "object.h" // ============================================================================= +#define GET_SHARED_FROM_THIS_FATAL_ERROR "Object was not created with `ObjectFactory::create`." + using namespace std; LINPHONE_BEGIN_NAMESPACE @@ -33,11 +36,21 @@ Object::~Object () { Object::Object (ObjectPrivate &p) : mPrivate(&p) {} shared_ptr Object::getSharedFromThis () { - return mPrivate->weak.lock(); + return const_pointer_cast(static_cast(this)->getSharedFromThis()); } shared_ptr Object::getSharedFromThis () const { - return mPrivate->weak.lock(); + shared_ptr object; + + try { + object = mPrivate->weak.lock(); + if (!object) + lFatal() << GET_SHARED_FROM_THIS_FATAL_ERROR; + } catch (const exception &) { + lFatal() << GET_SHARED_FROM_THIS_FATAL_ERROR; + } + + return object; } void ObjectFactory::setPublic (const shared_ptr &object) {