文档章节

C++单例模式设计与实现

secondtonone1
 secondtonone1
发布于 2016/08/09 17:57
字数 414
阅读 3
收藏 0

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

secondtonone1

粉丝 4
博文 38
码字总数 53981
作品 1
东城
高级程序员
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图之用例图 Android 架构师之路2 UML图之类图 Android 架构师之路3...

香沙小熊
06/21
0
0
Cocos2d-x设计模式--二段构建模式

设计模式在程序设计中会经常用到,也许你从来没有留意过设计模式,其实你却一直在使用设计模式!cocos2dx中有不少的设计模式,所以从本篇博客开始探讨一下cocos2dx中的设计模式,看看引擎都使...

_子墨
2014/09/15
0
0
手把手教学:详解Swift中的iOS设计模式

说到设计模式,相信大家都不陌生,但是又有多少人知道它背后的真正含义?绝大多数程序员都知道设计模式十分重要,不过关于这个话题的文章却不是很多,开发者们在开发的时候有时也不太在意设计...

hejunbinlan
2015/08/22
0
0
一个程序员的读书笔记:程序设计的反思

刚开始编程的时候是在高中,那个时候计算机课上老师教的是pascal。一种典型的面相过程的语言。那个时候懵懵懂懂的认为:程序还是一个蛮神奇的东西,敲几个英文字符进去,就能够有反馈。即使这...

绝影jy
2014/05/03
0
4
设计模式 (二)——观察者模式(Observer,行为型)

转载自:https://blog.csdn.net/k346k346/article/details/57080491 1.概述 使用设计模式可以提高代码的可复用性、可扩充性和可维护性。观察者模式(Observer Pattern)属于行为型模式,在对...

anda0109
04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【挑战剑指offer】系列03:逆序打印单链表

本系列的算法原题来自于“牛客网-剑指offer”,写这个板块,不仅仅是解决算法问题本身,更是手动提高难度、自行变式,思考更多的解决方案,以带给自己一些启发。 1. 【逆序打印单链表】原始题...

LinkedBear
56分钟前
3
0
Linux内存布局

今天这篇文章主要是我之前看Linux内核相关知识和博客Gustavo Duarte中。我主要是看了这篇博客,并且结合之前的知识,对内存管理的的理解又上升了一个档次。所以想通过这篇文章总结下。 我们先...

linuxprobe16
今天
1
0
day94-20180921-英语流利阅读-待学习

记录死亡还是消费死者?自杀报道的媒体偏见 雪梨 2018-09-21 1.今日导读 自杀事件报道一直是新闻报道的重要部分,具有骇人听闻、吸引眼球的特点。可是在报道这些事件的时候,除了客观陈述事实...

飞鱼说编程
今天
5
0
如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
5
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部