文档章节

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协议 Android 网络编程2 Okhttp缓存机制 Android 网络编程3 Java NIO to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图...

香沙小熊
2018/06/21
0
0
大家一起来说一说自己掌握的设计模式

做了比较多的通讯和SDK,虽然是用C++,但是SDK对外的都是C的接口,而且项目中主要是消息封装,socket IO模型和多线程, 消息收发,业务比较少,所以用的OOP也比较少,用了很多年C++,却一直没有...

沉淀岁月
2013/09/10
186
0
Cocos2d-x设计模式--二段构建模式

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

_子墨
2014/09/15
0
0
设计模式之简单工厂模式学习

学习C++有一两年了,面向对象思想也有所接触。使用过MFC以及OSG类库进行过开发,无非就是调用别人设计好的类库,要说自己使用面向对象的思想去开发程序,这个还真没有。 意识到自己在这方面的...

长平狐
2012/10/08
55
0
碰上个"应试"面试官

今天去一公司面试,一去就给我做题,一共只有6题,上面写着“一小时内完成”,我心想这题目是有多难啊?6题要做1个小时。。。第一题是测试对指针的理解,这题我做对了,可是面试官说我错了,...

一如当初
2014/07/25
3.6K
32

没有更多内容

加载失败,请刷新页面

加载更多

Hyperledger Fabric 实战(十): Fabric node SDK 样例 - 投票DAPP

Fabric node SDK 样例 - 投票DAPP 参考 fabric-samples 下的 fabcar 加以实现 目录结构 . ├── app │ ├── controllers │ │ └── index.js │ ├── enrollAdmin.js │ ├── in...

Jonluo
6分钟前
0
0
Redis高级特性及优化

redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它。 过期时间可以设置为秒或者毫秒精度。 过期时间分辨率总是 1 毫秒。 过期信息被...

rechardchensir
11分钟前
0
0
数据库设计-邮箱地址

1.前言 当我们涉及到要存储邮箱地址的时候,我们都知道应该存储为字符型,但是应该存储多长呢? 2.Stackoverflow StackOverflow一直是搜索答案的利器,这一次也不例外。这里多说一句,其实在...

hengbao5
15分钟前
0
0
uml类图

平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道。实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一、类的属性的表示方式 在UML类图中,...

asdf08442a
18分钟前
1
0
Linux下执行脚本报错提示invalid option 3: set: -

1、在环境下执行sh报错invalid option 3: set: - 2、于是换成chmod 777 install.sh改执行权限,并且默认使用#!/bin/bash bash: ./install.sh: /bin/bash^M: bad interpreter: No such file ......

noob_chr
19分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部