From 4164903d0e1bd255d2230e524c315eba5e8fee7a Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Fri, 25 May 2007 18:13:01 +0200 Subject: [PATCH] eliminate memory leak --- src/core/component-manager.h | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/core/component-manager.h b/src/core/component-manager.h index 2e7564289..737e6078d 100644 --- a/src/core/component-manager.h +++ b/src/core/component-manager.h @@ -235,38 +235,41 @@ class MakeClassId : public ClassId private: typedef ObjectMaker MakerType; static Callback,T1,T2> m_callback; - static std::vector m_supportedInterfaces; + void Register (const InterfaceId *array [], uint32_t n) { + std::vector supportedInterfaces; + for (uint32_t i = 0; i < n; i++) + { + supportedInterfaces.push_back (array[i]); + } + RegisterCallback (*this, &m_callback, supportedInterfaces); + } public: MakeClassId (std::string name) : ClassId (name) { - RegisterCallback (*this, &m_callback, m_supportedInterfaces); + const InterfaceId *array[] = {}; + Register (array, sizeof (array)/sizeof(InterfaceId)); } MakeClassId (std::string name, const InterfaceId &iid) : ClassId (name) { - m_supportedInterfaces.push_back (&iid); - RegisterCallback (*this, &m_callback, m_supportedInterfaces); + const InterfaceId *array[] = {&iid}; + Register (array, sizeof (array)/sizeof(InterfaceId)); } MakeClassId (std::string name, const InterfaceId &iid0, const InterfaceId iid1) : ClassId (name) { - m_supportedInterfaces.push_back (&iid0); - m_supportedInterfaces.push_back (&iid1); - RegisterCallback (*this, &m_callback, m_supportedInterfaces); + const InterfaceId *array[] = {&iid0, &iid1}; + Register (array, sizeof (array)/sizeof(InterfaceId)); } MakeClassId (std::string name, const InterfaceId &iid0, const InterfaceId &iid1, const InterfaceId &iid2) : ClassId (name) { - m_supportedInterfaces.push_back (&iid0); - m_supportedInterfaces.push_back (&iid1); - m_supportedInterfaces.push_back (&iid2); - RegisterCallback (*this, &m_callback, m_supportedInterfaces); + const InterfaceId *array[] = {&iid0, &iid1, iid2}; + Register (array, sizeof (array)/sizeof(InterfaceId)); } }; template Callback,T1,T2> MakeClassId::m_callback = MakeCallback (&MakeClassId::MakerType::MakeObject); -template -std::vector MakeClassId::m_supportedInterfaces;