singleton即单件模式,实现这种模式的类在程序生命周期里只能有且仅有一个实例。

使用singleton,需要包括头文件:

#include <boost/serialization/singletion.hpp>
using boost::serialization::singleton;

类摘要:

template <typename T>
class singleton : public boost:noncopyable
{
public:
static const T & get_const_instance();
static T&get_mutable_instance();
};

singleton把模板参数T时限为一个单件类,对类型T要求是有缺省的构造函数,而且在构造和析构时不能抛出异常,因为单件在mian() 前后构造和析构,如果发生异常时无法捕获的。

singleton提供两个静态成员函数访问单件实例,可分别获得常对象和可变对象。常对象单件总是线程安全,因为他不会改变内部状态,可变对象单件则不是线程安全的,可能发生线程竞争问题。

用法:

实现一个唯一的三维原点实例:

为了演示singleton的创建和销毁,增加了构造函数与析构函数:

class point
{
public:
point(int a=0,int b=0,int c=0) :x(a),y(b),z(c)
{
cout<<"point ctor"<<endl;
}
~point()
{
cout<<"point dtor"<<endl;
}
};

只需要把想成为单件的类作为它的模板参数就可以,接下来由singleton自动完成:

#include <boost/serialization/singleton.hpp>
using boost::serialization::singleton;
int main()
{
cout<<"main() start"<<endl;
typedef singleton<point> origin; origin::get_const_instance().print();
origin::get_mutable_instance().print(); cout<<"main() fiinish"<<endl;
}
//运行结果:
point ctor
main() start
0,0,0
0,0,0
main() finish
point dtor

除了模板方式,还可以通过继承的方式来使用:

#include <boost/serialization/singleton.hpp>
using boost::serialization::singleton; class point:public singleton<point>
{...}
int main()
{
cout<<"main() start"<<endl;
typedef singleton<point> origin; origin::get_const_instance().print();
origin::get_mutable_instance().print(); cout<<"main() fiinish"<<endl;
}

继承的方式更为彻底一些。

boost::singleton的更多相关文章

  1. 转:Singleton模式

    C++完美实现Singleton模式  转自:http://www.cppblog.com/dyj057/archive/2005/09/20/346.html boost库的Singleton的实现 ...

  2. [转] boost库的Singleton的实现以及static成员的初始化问题

    http://www.cnblogs.com/kex1n/archive/2011/04/05/2006194.html effectie c++的条款4中提到: (global对象,定义在names ...

  3. 转:C++ Boost/tr1 Regex(正则表达式)快速指南

    C++ Boost/tr1 Regex(正则表达式)快速指南 正则表达式自Boost 1.18推出,目前已经成为C++11(tr1)的标准部分. 本文以Boost 1.39正则表达式为基础,应该广泛适 ...

  4. item2,实现singleton模式

    单例模式? 只能实现一个实例的类成为单例. ============== muduo库中单例模式实现 #include<boost/noncopyable.hpp> //#include ...

  5. boost muti-thread

    背景 •       今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率:为了达到最大的吞吐量,事务服务器在单独的线程上运行服务程序: GUI应用程序将那些费时,复杂的处理以线程的形式单独 ...

  6. 可以继承的C++ Singleton基类

    单例模式(Singleton Pattern)是设计模式中的一种,它用来保证系统中最多只能存在一个它的实例,其做法是由类自身来创建和持有它的对象实例,把对实例的创建权和管理权都控制在自己手中,以便控制 ...

  7. (七)boost库之单例类

    (七)boost库之单例类 一.boost.serialzation的单件实现 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一 ...

  8. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

  9. Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET

    Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET Boost::Thread使用示例 分类: C/C++ 2011-07-06 14:48 5926 ...

随机推荐

  1. SecureCRT系列:生成公私钥

    SecureCRT下载地址:http://www.portablesoft.org/securecrt-securefx-legacy-versions/1.打开我们的SecureCRT客户端,点击t ...

  2. DAO工具类的封装源码

    详细源码见下表,绝对原创,转载请注明出处! package com.ydj.util; import java.sql.Connection; import java.sql.PreparedStat ...

  3. STL源码剖析——空间配置器Allocator#1 构造与析构

    以STL的运用角度而言,空间配置器是最不需要介绍的东西,因为它扮演的是幕后的角色,隐藏在一切容器的背后默默工作.但以STL的实现角度而言,最应该首先介绍的就是空间配置器,因为这是这是容器展开一切运作的 ...

  4. BJFU-206-基于顺序存储结构的图书信息表的修改

    #include<stdio.h> #include<stdlib.h> #define MAX 1000 typedef struct{ double no; char na ...

  5. Python-17-反射

    一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被 ...

  6. IDE集成开发环境(pycharm)、基本数据类型、用户的交互、运算符

    一.IDE集成开发系统pycharm 目的:让Python编程更方便.高效. pycharm的简单定义: PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提 ...

  7. python离线安装外部库(第三方库)

    在官网下好外部库,解压后,点击解压后的文件夹,按住shift 右击在命令行中执行 输入 python setup.py install

  8. python第三天---列表的魔法

    # list 列表 # 中括号括起来,逗号分隔每个元素, # 列表中可以是数字字符串.列表等都可以放进去 list1 = [123, "book", "手动", ...

  9. Cow Brainiacs

    #include<stdio.h> int main() { ,i; scanf("%d %d",&n,&b); ;i<=n;i++) { f*= ...

  10. Kubernetes(k8s) docker 修改 /dev/shm大小

    一.问题 /dev/shm在/etc/fstab中挂载,对应tmpfs,实际使用的是内存的空间.默认情况下,/dev/shm为物理内存大小的一半. 在Kubernetes上跑docker,发现/dev ...