From b5b5785d04b2b044475149bc0e4074e3f36c0fbd Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Sat, 17 May 2014 21:01:06 +0200 Subject: [PATCH] [DEV] stabilize shared object interface --- sources/ewol/object/Object.cpp | 2 +- sources/ewol/object/Owner.h | 3 --- sources/ewol/object/Shared.h | 9 ++++++++- sources/ewol/widget/Manager.cpp | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/sources/ewol/object/Object.cpp b/sources/ewol/object/Object.cpp index 4ebe72a7..b75fb847 100644 --- a/sources/ewol/object/Object.cpp +++ b/sources/ewol/object/Object.cpp @@ -13,7 +13,7 @@ #include #undef __class__ -#define __class__ "ewol::object::Shared" +#define __class__ "Object" const char* const ewol::Object::configName = "name"; diff --git a/sources/ewol/object/Owner.h b/sources/ewol/object/Owner.h index 6c82b83a..bbe3fc9c 100644 --- a/sources/ewol/object/Owner.h +++ b/sources/ewol/object/Owner.h @@ -92,9 +92,6 @@ namespace ewol { return m_pointer; } }; - template Owner makeOwner(T* _pointer) { - return Owner(_pointer); - } }; // section to compare Owner pointer of an object with an other diff --git a/sources/ewol/object/Shared.h b/sources/ewol/object/Shared.h index 91b3999b..a0d975d4 100644 --- a/sources/ewol/object/Shared.h +++ b/sources/ewol/object/Shared.h @@ -103,8 +103,15 @@ namespace ewol { return m_pointer; } }; + // after calling this function, you might never call a delete on this pointer. (if you want to be able to use a delete, simply Shared<>(pointer) template Shared makeShared(T* _pointer) { - return Shared(_pointer); + if (_pointer == nullptr) { + return Shared(); + } + Shared tmp(_pointer); + // remove one element to permit to remove at the last instance + _pointer->objRefCountDecrement(); + return tmp; } }; // section to compare shared pointer of an object with an other diff --git a/sources/ewol/widget/Manager.cpp b/sources/ewol/widget/Manager.cpp index 9a573b63..d4715c78 100644 --- a/sources/ewol/widget/Manager.cpp +++ b/sources/ewol/widget/Manager.cpp @@ -264,7 +264,7 @@ ewol::object::Shared ewol::widget::Manager::create(const std::stri if (m_creatorList.exist(nameLower) == true) { ewol::widget::Manager::creator_tf pointerFunction = m_creatorList[nameLower]; if (pointerFunction != nullptr) { - return pointerFunction(); + return ewol::object::makeShared(pointerFunction()); } } EWOL_WARNING("try to create an UnExistant widget : " << nameLower);