真实的C++单例模式举例

把构造函数声明为protected的理由很简单,但把构造函数声明为private的原因却很少知道.

从语法上讲,任何函数如果被声明为private,这个函数就不能从外部调用,构造函数也是函数,相反,只能成为在内部使用的构造函数,但偏偏有些场景就是要这样处理,才可以达到一定的程序设计效果:

1.屏蔽构造函数,就是不让你创建这个类的对象,就是不想让你在外面的其他函数中直接new这个类,而只能从此类内部进行构造(如下面的代码)。

2.阻止其他函数中执行此类的拷贝构造函数或赋值操作符,避免编译器自动生成默认的拷贝构造函数,不想按照默认的拷贝构造函数进行逐字段拷贝或赋值操作符,这时可以把拷贝构造函数或赋值操作符声明成private的

 1 class IOCP
 2 {
 3 private:
 4      IOCP()
 5      {
 6           //创建完成端口(备注:OS维护的一个队列,OS把i/o操作已经完成的事件通知放到这里)的句柄
 7           if ((m_hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 0)) == NULL)
 8                ;
 9           //创建工作线程,用来处理完成端口消息的
10           m_hWorkerThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, &m_workerThreadID);
11      };
12      ~IOCP();
13 private:
14      static IOCP* m_instance;
15 public:
16      static IOCP* Instance()
17      {
18           if( m_instance == NULL )
19           {
20                m_instance = new IOCP();
21           }
22           return m_instance;
23      }
24      void Wait();
25      static DWORD __stdcall WorkThread(LPVOID Param);
26      HANDLE m_hIOCP; //完成端口的句柄
27 private:
28      HANDLE m_hWorkerThread; //工作线程句柄
29      DWORD m_workerThreadID;
30 public:
31      //将套接字绑定到完成端口
32      bool RegisterToCompletionPort( SOCKET socket , void* completionKey);
33 };
时间: 2024-10-29 00:42:38

真实的C++单例模式举例的相关文章

Android 单例模式探讨

Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在"对象创建的次数以及何时被创建"这两点上较真起来,Singleton模式可以相当的复杂,比头五种模式加起来还复杂,譬如涉及到DCL双锁检测(double checked locking)的讨论.涉及到多个类加载器(ClassLoader)协同时.涉及到跨JVM(集群.远程EJB等)时.涉及到单例对象被销毁后重建等. 目的: 希望对象只创建一个实例,并且提供一个全局的访问点. 图6.

Android 设计模式 之 单例模式

http://blog.csdn.net/fangchongbory/article/details/7734199 目录(?)[+] 单例模式常见情景 首先实现1中的单例模式A 实现2中单例模式B 实现3单例模式C 实现4单例模式D 可带参数单例模式E 终极版单例模式F android中源码单例模式举例 日历模块 Collator类 Editable类 AccessibilityManager类 1.单例模式常见情景 设计模式中,最简单不过的就是单例模式.先看看单例模式 原文:http://w

单例模式和多例模式

单例模式的关键有两点: 1.构造方法为私有,这样外界就不能随意调用. 2.get的方法为静态,由类直接调用 多例模式(Multiton) 1 .多例类可以有多个实例 2 .多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例. 一.单例模式和多例模式说明: 1. 单例模式和多例模式属于对象模式. 2. 单例模式的对象在整个系统中只有一份,多例模式可以有多个实例. 3. 它们都不对外提供构造方法,即构造方法都为私有. 4. 单例模式和多例模式的结构图如下所示: 单例模式的三种形式: 第一

单例和多例的区别

单例和多例的区别 单例多例需要搞明白两个问题:1. 什么是单例多例:2. 如何产生单例多例:3. 为什么要用单例多例4. 什么时候用单例,什么时候用多例:1. 什么是单例.多例:所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 一.单例模式和多例模式说明: 1.         单例模式和多例模式属于对象模式. 2.         单例模式的对象在整个系统中只有一份,多例模式可以有多

C++ 与设计模式学习(其一)

记得曾经一年前,听到同学再说设计模式,当时觉得不怎么重要,所以就没有去系统的学习,这一放,就是一年,直到前段时间,面试了一个阿里巴巴的职位,要我谈谈对于设计模式的看法. 之后就好好了看了一些文章,好好的体会了一番! 现在将自己的心得好好的分享一下吧!(由于设计模式内容比较多,以及设计模式的六大原则,后续都会陆续的更新!) 1. 单例模式(单件模式):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式.单例模式只应在有真正的“单一实例”的需求时才可使用. 举个栗子:

C++静态变量和静态成员函数的怪脾气

     今天为了代码更加简洁,用了一个class MSGHelper来定义一些静态成员变量和静态成员函数. 开始时,我的写法是(不是真实代码,只是举例): <strong>class helper { static int index; static void SENDMSG(tcpsocket *&,string &): }; static int helper::index=1; static void helper::SENDMSG(tcpsocket * &s

写给 Android 开发的小程序布局指南,Flex 布局!

一.序 Hi,大家好,我是承香墨影! 最近在做小程序,验证一些方向,开发效率确实很快,就是各种微信的审核有点费劲,但是总归是有办法解决的. 想要开发一款小程序,其实和我们正常写一款 App 类似,你需要有精美的前端布局,并且同时还需要处理和前端 UI 组件的交互以及它们背后的逻辑. 最近会分享一些关于小程序的内容(不保证,想到哪里写到哪里),今天先说说接触小程序第一步:布局. 如果有前端经验的话,小程序是非常容易上手的,而对于新手,第一步当然是阅读小程序的官方文档,不过之后你马上就要面临布局的问

Java设计模式学习记录-装饰模式

前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一些图形界面构件功能的增强等地方都运用了装饰模式. 装饰模式 定义 装饰模式的定义是:在不改变原类文件以及不使用继承的情况下,动态的扩展一个对象的功能.装饰模式是通过创建一个包装对象来实现的,也就是用装饰来包裹真实的对象. 举例 还是老规矩,举例说明,在给亲朋好友过生日时会买生日蛋糕,然后生日蛋糕又有

经验分享:程序员如何快速定位问题(BUG)

让我掉下眼泪的 不止内存泄漏 让我夜夜不眠的 不止你的需求 明天还要改多久 你攥着我的手 让我感到为难的 是善变的需求 发布总是在半夜 回滚是永远的愁 错误(Bug)随时的暴漏 困扰着我心头 作为程序员,以上这些场景你一定都经历过.今天就来聊聊如何快速定位问题. 先划重点,下文所写都是一家之言,本人工作经验不多,语言表达能力有限,如果写的不好,还望轻喷.另外,本文所讲都是站在Java后端开发者的角度. 背景 下文所讲内容,都会围绕以下几个真实案例来做举例分析,先描述一下具体案例: 案例1:App