在C中,如何初始化在Singleton模板中声明的私有类的静态成员?
发布时间:2020-12-16 09:30:21 所属栏目:百科 来源:网络整理
导读:好吧,我应该简单地说我想创建一个我可以继承的基础Singleton类,以及我希望通过模板实现的方式. 为了避免内存泄漏,我不直接使用指向实例的指针,而是使用将处理删除指针的私有类. 这是我的实际代码(不工作): template typename T class Singleton{private: cl
好吧,我应该简单地说我想创建一个我可以继承的基础Singleton类,以及我希望通过模板实现的方式.
为了避免内存泄漏,我不直接使用指向实例的指针,而是使用将处理删除指针的私有类. 这是我的实际代码(不工作): template <typename T> class Singleton { private: class PointerInstance { private: T* instance; public: PointerInstance() : instance(0) {} ~PointerInstance() { delete instance; } // no memory leak ! T* Get() { if ( !instance ) { instance = new T(); } return instance; } }; static PointerInstance PInstance; public: static T* pGetInstance(void) { return PInstance.pGet(); }; protected: Singleton(void){}; ~Singleton(void){}; }; 这是典型的派生类声明应该是这样的: class Child : public Singleton<Child> { friend class Singleton<Child>; Child(); // etc... }; 基本上缺少的是我作为Singleton的每个T类的PInstance实例. 我的问题是:有没有办法一劳永逸地在包含上面代码的Singleton.h中使用一些通用代码行,或者除了为每个代码添加一些特定的代码行之外别无选择衍生类? (Bonus:有没有更好的方法在C中做一个Singleton类?) 解决方法
这是一种编写CRTP Singleton而没有内存泄漏的简单方法:
template <class T> class Singleton { friend class T; private: Singleton() {}; ~Singleton() {}; Singleton(const Singleton&); // not implemented const Singleton& operator=(const Singleton&); // not implemented public: static T* pGetInstance() { static T theInstance; return &theInstance; } }; 用法与问题中的相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |