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

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

 
1.屏蔽构造函数,就是不让你创建这个类的对象,就是不想让你在外面的其他函数中直接new这个类,而只能从此类内部进行构造(如下面的代码)。
2.阻止其他函数中执行此类的拷贝构造函数或赋值操作符,避免编译器自动生成默认的拷贝构造函数,不想按照默认的拷贝构造函数进行逐字段拷贝或赋值操作符,这时可以把拷贝构造函数或赋值操作符声明成private的
 
 class IOCP
{
private:
IOCP()
{
//创建完成端口(备注:OS维护的一个队列,OS把i/o操作已经完成的事件通知放到这里)的句柄
if ((m_hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, )) == NULL)
;
//创建工作线程,用来处理完成端口消息的
m_hWorkerThread = CreateThread(NULL, , WorkThread, (LPVOID)this, , &m_workerThreadID);
};
~IOCP();
private:
static IOCP* m_instance;
public:
static IOCP* Instance()
{
if( m_instance == NULL )
{
m_instance = new IOCP();
}
return m_instance;
}
void Wait();
static DWORD __stdcall WorkThread(LPVOID Param);
HANDLE m_hIOCP; //完成端口的句柄
private:
HANDLE m_hWorkerThread; //工作线程句柄
DWORD m_workerThreadID;
public:
//将套接字绑定到完成端口
bool RegisterToCompletionPort( SOCKET socket , void* completionKey);
};

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

  1. Android 设计模式 之 单例模式

    http://blog.csdn.net/fangchongbory/article/details/7734199   目录(?)[+] 单例模式常见情景 首先实现1中的单例模式A 实现2中单例模式 ...

  2. python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)

    一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ...

  3. Android-Java单例模式

    今天我们来说说一个非常常用的模式,单例模式,单例模式让某个类中有自己的实例,而且只实例化一次,避免重复实例化,单例模式让某个类提供了全局唯一访问点,如果某个类被其他对象频繁使用,就可以考虑单例模式,以 ...

  4. Android 单例模式探讨

    Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五 ...

  5. Python 【面向对象】

    前言 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言 ...

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

    记得曾经一年前,听到同学再说设计模式,当时觉得不怎么重要,所以就没有去系统的学习,这一放,就是一年,直到前段时间,面试了一个阿里巴巴的职位,要我谈谈对于设计模式的看法. 之后就好好了看了一些文章,好好 ...

  7. Webpack插件开发简要

    背景 如今'大前端'这个概念在前端界大热,说'大前端',我们就要提到'前后端分离','前后端分离'又离不开'本地开发构建','本地开发构建'自然离不开webpack,webpack想要工作,那它就需要 ...

  8. MyBatis-Spring中间件逻辑分析(怎么把Mapper接口注册到Spring中)

    1.      文档介绍 1.1.      为什么要写这个文档 接触Spring和MyBatis也挺久的了,但是一直还停留在使用的层面上,导致很多时候光知道怎么用,而不知道其具体原理,这样就很难做一 ...

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

    一.序 Hi,大家好,我是承香墨影! 最近在做小程序,验证一些方向,开发效率确实很快,就是各种微信的审核有点费劲,但是总归是有办法解决的. 想要开发一款小程序,其实和我们正常写一款 App 类似,你需 ...

随机推荐

  1. 简述frame、bounds、center

    frame是该视图在父视图坐标系统中的位置和大小.(参照父视图中的坐标系统) bounds是该视图在自身坐标系统中的位置和大小.(参照自身的坐标系统) center是该视图的中心点在父视图坐标系统中的 ...

  2. 【Networking】go get 失败,代理配置

    推荐VPN: https://vpnso.com/   如果还是有问题,比如: 重新编译Git,使用openssl替换gnutls,方法如下: http://askubuntu.com/questio ...

  3. poj 3228(二分+最大流)

    题目链接:http://poj.org/problem?id=3228 思路:增设一个超级源点和一个超级汇点,源点与每一个gold相连,容量为gold数量,汇点与仓库相连,容量为仓库的容量,然后就是二 ...

  4. jqGrid 学习

    jqGrid 学习: 一.下载需要的jqGrid包:http://www.trirand.com/blog/?page_id=6 二.下载JQuery UI:http://jqueryui.com/d ...

  5. group by子句的三点注意项

    1.在含有统计函数的select语句中,如果不使用group by子句,那么select子句中只允许出现统计函数,其他任何字段都不允许出现: 2.在含有统计函数的select语句中,如果使用了grou ...

  6. SQL 2008R2 日期转换

    --SQL CONVERT日期转换 print GETDATE() --相同 Select CONVERT(varchar(100), GETDATE(), 0) AS NDateTime --: 0 ...

  7. QML的渲染方式相较于之前的版本也有了重大的更新(CPU线程负责绘制,GPU线程负责渲染),还有好多经常评论 good

    作者:qyvlik链接:http://www.zhihu.com/question/38867614/answer/78583440来源:知乎著作权归作者所有,转载请联系作者获得授权. 做UI啊.如果 ...

  8. const放在函数前和函数后

    class c { public: returnType functionName (parameter list) const; //这个函数不会修改类成员 const returnType fun ...

  9. day43 多表查询和pymysql

    复习 增删改查全语法 # 增 insert into db1.t1(字段2, 字段1, ..., 字段n)|省略 values (值2, 值1, ..., 值n)|(值1, 值2, ..., 值n)[ ...

  10. emwin之窗口关闭按钮用法

    @2018-07-27 [小记] 使用函数 FRAMEWIN_AddCloseButton() 实现关闭当前窗口的功能时,调用其窗口的父窗口必须处于打开状态,否则将导致假死(当前窗口死了,系统还在工作 ...