在C中,如何初始化在Singleton模板中声明的私有类的静态成员?

在C中,如何初始化在Singleton模板中声明的私有类的静态成员?,第1张

概述好吧,我应该简单地说我想创建一个我可以继承的基础Singleton类,以及我希望通过模板实现的方式. 为了避免内存泄漏,我不直接使用指向实例的指针,而是使用将处理删除指针的私有类. 这是我的实际代码(不工作): template <typename T> class Singleton{private: class PointerInstance { private: 好吧,我应该简单地说我想创建一个我可以继承的基础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 implementedpublic:  static T* pGetInstance()  {    static T theInstance;    return &theInstance;  }};

用法与问题中的相同.

总结

以上是内存溢出为你收集整理的在C中,如何初始化在Singleton模板中声明的私有类的静态成员?全部内容,希望文章能够帮你解决在C中,如何初始化在Singleton模板中声明的私有类的静态成员?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1213150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存