剑指offer-面试题2.实例Singleton模式
题目:设计一个类,我们只能生成该类的一个实例
这道题显然是对设计模式的考察,很明显是单例模式。什么是单例模式呢,就是就像题目所说的只能生成一
个类的实例。那么我们不难考虑到下面几点:
1.不能new多个对象,那么必然该类的构造函数是私有的
2.类对象只有一个,那么必然该对象只能有一个私有的静态成员变量,该成员变量为类实例或者类实例的指针。
3.但是我们同时还要考虑到如果获取这个唯一对象实例,那么该类必然有一个公有的成员函数来获取这个唯一的
类实例然而由于不允许new对象,那么必须提供一种类操作该接口的方式,很显然就是静态成员函数。
至此不难写设计出这样一个类:
class CSingle
{
private:
CSingle() //私有构造函数,禁止new对象实例
{
}
static CSingle *m_pInstance; //私有静态全局变量,保证唯一性
public:
static CSingle * GetInstance() //提供一个共有接口获取该唯一类实例
{
if(m_pInstance == NULL)
m_pInstance = new CSingle();
return m_pInstance;
}
};
那么我们构造这个唯一实例是这样的:
CSingle *Single=CSingle::GetInstance();//当该唯一实例不存在时,这是唯一获取类实例的方法。
CSingle *Single1=Single->GetInstance();//当上一步执行后便可用此方法获取唯一类实例
当然也可以这样
CSingle & Single1=Single->GetInstance();
上面的做法对于单线程来说可以表现的很好了,但是对于多线程来说,就可能有问题了。当两个线程
同时创建实例的时候,这时候实例不存在,这时候就可能产生两个类实例,于是我们就需要用同步的方
法保证创建的时候只有一个线程。线程同步的方法很多,可以是临界区,可以是互斥等。
剑指offer-面试题2.实例Singleton模式的更多相关文章
- C++版 - 剑指offer 面试题22:栈的压入、弹出序列 题解
剑指offer 面试题22:栈的压入.弹出序列 提交网址: http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...
随机推荐
- hdu 5612 Baby Ming and Matrix games(dfs暴力)
Problem Description These few days, Baby Ming is addicted to playing a matrix game. Given a n∗m matr ...
- Unity 代码检测单击,双击,拖放
今天小伙伴问我如何自己写一段代码检测 单击 双击 和 拖放.于是就写了这段代码O(∩_∩)O~ 代码如下: using UnityEngine; using System.Collections; p ...
- proxy set 拦截
set方法用来拦截某个属性的赋值操作. 假定Person对象有一个age属性,该属性应该是一个不大于200的整数,那么可以使用Proxy保证age的属性值符合要求. let validator = { ...
- Android-JNI编程-图文解析
要想阅读并调试下文源码,首先要确保你的NDK环境是ok的: 编译环境:win7+Eclipse+ADT+SDK+NDK:基本用最新的就ok. 说明下,下文代码就是一个简单的 ...
- asp.net 页面实践执行顺序
protected void Page_Load(object sender, EventArgs e) { } #region OnPreInit 第一步 protected override vo ...
- asp.net利用Ajax和Jquery在前台向后台传参数并返回值
1----------前台 首先需要 Jquer的包 <script src="js/jquery-1.9.1.js" type="text/javascript& ...
- 注册界面的优化之ActionBar组件的应用之(一)ActionBar组件的布局实现
开发步骤: 在res下menu文件夹中创建一个actionbar_menu_register.xml菜单资源文件 在资源文件中添加标签设置一个或多个ActionBar功能选项 //action ...
- 如何在程序退出的时候清除activity栈
在公司里接手了一个后期的项目,由于项目前期对activity栈管理的不够谨慎,所以导致了在某些情况下程序退出的时候没有将activity栈清除掉.在网上找到的无非就是那几种例子,都不是最好的解决办法. ...
- C++服务器设计(零):总体设计
这个系列把毕业论文的部分贴了出来,以作保存留念.整个系列分为三大部分,其中第一章到第三章是介绍服务器的系统层设计,设计思路参考了libevent和muduo等开源代码的实现:第四章到第六章是介绍服务器 ...
- (原)ubuntu16在torch中使用caffe训练好的模型
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5783006.html 之前使用的是torch,由于其他人在caffe上面预训练了inception模型 ...