From 6caf117b9136ad2f5ae0d1df06e15838035867fb Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 4 Oct 2017 10:54:09 +0200 Subject: [PATCH] feat(Object): check weak ptr when `getSharedFromThis` is called --- src/object/object.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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) {