C++单例模式设计与实现
C++单例模式设计与实现
secondtonone1 发表于1年前
C++单例模式设计与实现
  • 发表于 1年前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

C++单例模式主要用途就是整个程序中只实例化一个对象,之后获取到的都是该对象本身进行处理问题。

单例模式一般都是在函数中采用局部静态变量完成的,因为局部的静态变量生命周期是随着程序的生命周期

一起结束,所以不用担心会失效。另外局部的静态变量作用域仅限于该函数内部,别的函数不会直接使用。

第三点就是局部的静态变量跟所有的静态变量一样,放在全局区(静态区),只被初始化一次。

 

下面是我结合模板设计的单例类

#ifndef _SINGLETON_CLASS_H_
#define _SINGLETON_CLASS_H_

template <class Type>
class Singleton
{
protected :
    Singleton(){}

public:
    static Type & getSingleton()
    {        
        return singleton;
    }

private:
        
    Singleton(const Singleton & temp){
        singleton = temp.singleton;
    }

private:
    static Type singleton;
};

template <class Type>
Type Singleton<Type>::singleton;

#endif

其余的类继承就可以了。

需要注意类的静态成员变量,如果不是integer type,需要在类外完成初始化。

int属于integer type,在类内可以完成初始化。

其余的类继承该类:

class NetWorkSystem : public Singleton<NetWorkSystem>
{
public:
    NetWorkSystem():m_nListenfd(0),m_pEvent_base(NULL),m_nConnId(0){}
    bool initial();
    static  void tcpread_cb(struct bufferevent *bev, void *ctx);
    static  void tcpwrite_cb(struct bufferevent *bev, void *ctx);
    static  void tcperror_cb(struct bufferevent *bev, short what, void *ctx);
    static  void listener_read_cb(evutil_socket_t fd, short what, void *p);
    void run();
    void release();
    //...   
 
};

使用时使用getsinggleton这个函数即可。

这是我服务器中截取的代码,可以从github中下载该服务器源码。

下载地址:https://github.com/secondtonone1/smartserver

服务器自己做的,还在不断地完善之中。

我的微信公众号平台:

 

共有 人打赏支持
secondtonone1
粉丝 4
博文 38
码字总数 53981
作品 1
×
secondtonone1
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: