设计一个类,我们只能生成该类的一个实例。
来源:互联网 发布:java开源聊天机器人 编辑:程序博客网 时间:2024/05/19 11:45
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。#pragma once#include<iostream>#include<mutex>#include<windows.h>using namespace std;//单例模式//单线程//class Singleton//{//private://Singleton() //将构造函数私有化//{//cout<<"Singleton()"<<endl;//}//Singleton(Singleton&); //将拷贝构造私有化//Singleton operator=(Singleton); //将赋值重载私有化//public:// static Singleton* get_instance()//{//if(_instance==NULL)//{//_instance=new Singleton();//}//return _instance;//}// void print()//{//cout<<"创建完成"<<endl;//}//private://static Singleton* _instance;//};////初始化静态变量//Singleton* Singleton::_instance=NULL;//懒汉模式 多线程(加锁) RAII//static mutex mtx;//class Singleton//{//private://Singleton()//{}//Singleton(Singleton&); //将拷贝构造私有化//Singleton operator=(Singleton); //将赋值重载私有化//public://static Singleton* get_instance() //之所以判断_instance两次,是因为分配对象很容易,大部分_instance不为空,如果只判断一次的话,\//当分配好对象了也要加锁,释放锁,效率太低//{//if(_instance==NULL) //一个线程访问后加锁执行,时间片完被挂起,下一个线程访问进行判断//{// //RAII 加锁(多线程访问)使用单例模式,抛异常时或语句块保证锁资源最终释放//lock_guard<mutex> lck(mtx);//if(_instance==NULL)//{//Singleton* tmp=new Singleton(); //new空间分为3个步骤:1.分配空间2.调用构造函数3.赋值,\//编译器优化可能将2,3重排//MemoryBarrier(); //内存栅栏 上下语句执行顺序不可改变//_instance=tmp;//}//}////return _instance;//}//void print()//{//cout<<"创建成功"<<endl;//}//private://static Singleton* _instance;//};//Singleton* Singleton::_instance=NULL;//饿汉模式(简洁,高效,不用加锁,但是在某些模式下有缺陷)class Singleton{private:Singleton(){cout<<"Singleton"<<endl;} Singleton(Singleton&); //将拷贝构造私有化 Singleton operator=(Singleton); //将赋值重载私有化public:static Singleton* get_instance(){return _instance;}void print(){cout<<"创建成功"<<endl;}private:static Singleton* _instance;};Singleton* Singleton::_instance=new Singleton();#include "singleton.h"void test(){Singleton::get_instance()->print();}int main(){test();system("pause");return 0;}
本文出自 “liveyoung” 博客,转载请与作者联系!
0 0
- 设计一个类,我们只能生成该类的一个实例。
- 设计一个类,我们只能生成该类的一个实例
- 设计一个类,我们只能生成该类的一个实例。
- 第七十二题(设计一个类,我们只能生成该类的一个实例)
- 72 题目:设计一个类,我们只能生成该类的一个实例
- 面试题2 设计一个类,我们只能生成该类的一个实例
- 设计一个类只能生成该类的一个实例
- 设计一个类,只能生成该类的一个实例
- 剑指officer第二题:题目:设计一个类,我们只能生成该类的一个实例(五种方法实现)
- 题目2:Singelton单例模式:设计一个类,只能生成该类的一个实例。
- 设计一个类,该类不能被继承,且只能实例化3次
- 设计一个类,该类不能被继承,且只能实例化3次
- 写一个只能生成两个实例对象的类
- 写一个类,要求:该类不能被继承且只能被实例化三次(转)
- C++ 设计一个类,只能生成一个对象
- 设计一个只能创建一个唯一实例的类——单例模式
- java思考题:设计一个只能创建一个唯一实例的类。
- 当一个类的构造函数被定义为private时如何创建该类的实例
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 两个栈实现一个队。
- 【JZOJ 3432】【OnlineJudge 1061】小M的服务器(含斜率优化解释)
- poj之旅——3484
- 请实现一个函数,把字符串中的每个空格替换成“%20”。
- 设计一个类,我们只能生成该类的一个实例。
- 输入一个链表的头结点,从尾到头反过来打印每个节点的值。
- 如何在AIX上安装axis2c
- 在一个二维数组中,每一行都从左到右递增,每一列都从上到下递增,在这样一个数组里查找一个数
- String类
- 信号
- 三角形类雏形2
- SIGCHLD 信号
- sig_atomic_t类型与volatile限定符