原理:将类的构造函数由pubic变为private或者protect,添加获取对象的public 成员函数,返回指向对象的静态指针。

首先来一段简单的代码实现

代码一

class Singleton
{
public:
static Singleton* instance()
{
if (pInstance == NULL)
{
return new Singleton();
}
return pInstance;
}
protected:
Singleton()
{ }
private:
static Singleton* pInstance;
};
Singleton* Singleton::pInstance = NULL;

上述代码存在内存泄露的问题,由于这个对象是由类本身自己构造的,依据c++对象释放的原则,在哪里创建就在哪里释放的原则,类本身自己需要释放这个对象,如果交给了客户去释放则会造成野指针的情况,虽然智能指针解决了内存泄露的问题,但是没有解决内存野指针的问题。如果在整个程序运行期间多个指针指向堆内存,就会造成野指针的现象,但是单实例模式采用的是静态只能指针,即在整个程序运行完成之后才会释放堆内存可以满足要求,无需share_ptr。

代码二

#include <stdio.h>
#include <memory>
#include "iostream"
using namespace std; class Singleton
{
public:
static Singleton* instance()
{
if (ptrInstance.get() == NULL)
{
ptrInstance.reset(new Singleton());
}
return ptrInstance.get();
}
protected:
Singleton()
{ }
private:
//static Singleton* pInstance;
static auto_ptr<Singleton> ptrInstance;
};
auto_ptr<Singleton> Singleton::ptrInstance;

设计模式之单实例模式(Singleton)的更多相关文章

  1. 8.2 GOF设计模式一: 单实例模式 SingleTon

    GOF设计模式一: 单实例模式 SingleTon  整个美国,只有一个“现任美国总统”  比如,在学校,“老师”,有数百个:“校长”,只有一个  系统运行时,如何保证某个类只允许实例化一个对象 ...

  2. xadmin系列之单实例模式

    先看下单实例的定义 python的模块实现单例模式是python语言特有的,python的模块天然就是单例的,因为python有个pyc文件,导入一次后,第二次导入直接从pyc中取数据了 这里我们主要 ...

  3. Python静态方法实现单实例模式

    单实例模式 当程序中需要同一个实例就可以解决问题的场景,可以使用单实例模式

  4. 23种设计模式之单例(Singleton Pattern)

    单例 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例(eg:应对一些特殊情况,比如数据库连接池(内置了资源)  全局唯一号码生成器),才能确保它们的逻辑正确性.以及良好的效率 ...

  5. 设计模式学习心得<单利模式 Singleton>

    概述 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 主要解决 一个全局使用的类频繁地创建与销毁. 何时使用 当您想控制实例数目,节省系统资源的时候. 如何解决 判断系统是否已经有这个单 ...

  6. 设计模式之单例(singleton)设计模式代码详解

    单例有两种:懒汉式和饿汉式 /** * 懒汉式的单例模式 * 这种单例模式如果采用到多线程调用该方法,有可能会产生多个实例,原因是: * 当线程一进入了①处,此时轮到线程二的时间片,线程二也来到①处, ...

  7. .Learning.Python.Design.Patterns.2nd.Edition之单实例模式

    可以慢慢理解.. 对照JAVA class Singleton(object): def __new__(cls): if not hasattr(cls, 'instance'): cls.inst ...

  8. [HBase Manual]CH5 HBase运行模式:单实例和分布式

    HBase运行模式:单实例和分布式 HBase运行模式:单实例和分布式 1.单实例模式 1.1 单实例在HDFS下 2.分布式 2.1 伪分布式 3完全分布式 HBase有2种运行模式,单实例和分布式 ...

  9. C#设计模式-单实例

    单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 1.经典的模式 namespace singleClass { class ...

随机推荐

  1. SpringMVC 实现邮件发送功能

    配置spring-mail.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns=&q ...

  2. iOS-NSOperation多线程

    NSOperation 一.简介 1.使用步骤 配合使用NSOperation和NSOperationQueue也能实现多线程编程 先将操作封装到一个NSOperation对象中 然后将NSOpera ...

  3. 理解C#系列 / .NET体系结构

    .NET体系结构 索引 前提条件 编程 编程语言 编程语言之一:C# C#依赖.NET平台 .NET平台下的公共语言运行库 .NET平台下的基础类库 C#可以开发什么? 前提条件 [最低配置]知道什么 ...

  4. 20150410---GridView分页(备忘)

    GridView自带分页功能,但是模板单一,试用较少数据. AllowPaging="true" PageSize="10" 启用分页设置.默认每页数量为10 ...

  5. c#与java之比较(转自Jack.Wang's home)

    很多人说C#是微软用来和Java抗衡的武器,因为二者在很大程度上有着惊人的相似 ,尽管如此,两者不同的地方也很多,所谓“于细微处见差异”.那么两者的相似和区 别都在什么地方呢?我们从今天开始,会从各个 ...

  6. 《JavaScript高级程序设计》心得笔记-----第三篇章

    第十章 1.    DOM1级定义了一个Node接口,以Node类型实现(除IE以外),为了确保跨浏览器兼容,最好用nodeType属性与数字数值进行比较(someNode. nodeType==1) ...

  7. HDU1106 排序

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1106   Problem Description 输入一行数字,如果我们把这行数字中的‘5’都看成空格 ...

  8. iOS Foundation框架 -4.NSDate类的简单用法

    NSDate为日期时间类对象,简单操作: 注意:直接NSLog输出NSDate对象,默认是以0时区为标准,因此会比北京时间少8小时 1.将Date格式转换为自定义格式的字符串格式 // 自定义Date ...

  9. Linux C 程序 GTK+图形界面编程(22)

    GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...

  10. PHP学习之数组的定义和填充

    数组就是把一组数据按顺序放在一起.PHP的数组和其它的语言数组有一点点不同:第一,保存的数据是可以是任何类型的:第二,数组的索引可以是数字,也可以是字符串. PHP的数组,说白了,就是关联数据每一条数 ...