C++之单例类模板
单例类模板:一个类只能有一个对象,比如超市收银系统中清点物品的仪器只有一个
设计思路:
1.构造函数,拷贝构造函数必须设计为private,防止自己生成新的对象
2.且类的指针要设计为static类型,并初始化为NULL
3.当需要使用对象时(即访问类指针)
空值:则重新分配对象
非空值:返回当前所指向的对象
代码如下
#include<iostream> using namespace std; //扫描物品的工具类
class SObject
{
private:
static SObject* c_instance;
SObject(const SObject&);
SObject& operator=(const SObject&);
SObject()
{ }
public:
static SObject* GetInstance();
void print()
{
cout << "this = " << this << endl;
}
}; //初始化指针
SObject* SObject::c_instance=NULL; //类似于构造函数
SObject* SObject::GetInstance()
{
if(c_instance==NULL)
c_instance=new SObject(); return c_instance;
} int main()
{
SObject *s1=SObject::GetInstance();
SObject *s2=SObject::GetInstance(); s1->print();
s2->print(); return ;
}
锦上添花之笔:考虑到可扩展性,我们可以用模板来实现
头文件内写上泛型类,利用友元类来实现
头文件:
#ifndef SINGLEEXAMPLE_H_
#define SINGLEEXAMPLE_H_ template<typename T>
class Singleexample
{
private:
static T* point;
public:
static T* Instance();
}; template<typename T>
T* Singleexample<T>::point = NULL; template<typename T>
T* Singleexample<T>::Instance()
{
if (point == NULL)
point = new T(); return point;
} #endif
主文件
#include<iostream>
#include"Singleexample.h" using namespace std; class Obeject
{
friend class Singleexample<Obeject>;
private:
Obeject(){}
Obeject(const Obeject&){}
Obeject& operator=(const Obeject&){}
public:
void print()
{
cout << "this = " << this << endl;
}
}; int main()
{
Obeject* s1=Singleexample<Obeject>::Instance();
Obeject* s2=Singleexample<Obeject>::Instance(); s1->print();
s2->print(); return ;
}
C++之单例类模板的更多相关文章
- 28.C++- 单例类模板(详解)
单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针) , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区 ...
- C++解析(27):数组、智能指针与单例类模板
0.目录 1.数组类模板 1.1 类模板高效率求和 1.2 数组类模板 1.3 堆数组类模板 2.智能指针类模板 2.1 使用智能指针 2.2 智能指针类模板 3.单例类模板 3.1 实现单例模式 3 ...
- C++中的单例类模板
1,本节课讲述单例类模式,实现并抽取相关代码实现单例类模板,在以后开发工作 中,如果想要使用单例模式,那么直接使用今天开发的单例类模板就可以: 2,需求的提出: 1,在架构设计时,某些类在整个系统生命 ...
- c++ 中的单例类模板的实现方法
1.什么是单例模式 在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在 ( Single Instance ).如超市收银系统,其外观主要由显示器(1个).扫描枪(1个).收款箱(1个)组 ...
- Unity Singleton 单例类(Unity3D开发之二十)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 ...
- C#单例类的实现
C#单例类的实现 单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例. 实现1:懒汉式,线程不安全 该实现没有额外开销, ...
- Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践
Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践 背景 很多开发者或者有经验的老手都会建议尽量不要用单例模式,这是有原因的. 单例模式是设计模式中最简单的也是大家通常最先接触的一种设计 ...
- Unity 游戏框架搭建 (十三) 无需继承的单例的模板
之前的文章中介绍的Unity 游戏框架搭建 (二) 单例的模板和Unity 游戏框架搭建 (三) MonoBehaviour单例的模板有一些问题. 存在的问题: 只要继承了单例的模板就无法再继承其他的 ...
- 游戏设计模式——C++单例类
前言: 本文将探讨单例类设计模式,单例类的懒汉模式/饿汉模式,单例类的多线程安全性,最后将利用C++模板减少单例类代码量. 本文假设有一个Manager管理类,并以此为探究单例类的设计模式. 懒汉模式 ...
随机推荐
- codefoce Cooking Time
#include <bits/stdc++.h> using namespace std; struct T { // 贪心 优先弹出相邻靠后的材料 int id; int p; bool ...
- Dependency Parsing -13 chapter(Speech and Language Processing)
https://web.stanford.edu/~jurafsky/slp3/13.pdf constituent-based 基于成分的phrasal constituents and phras ...
- Light OJ 1296:Again Stone Game(SG函数打表找规律)
Alice and Bob are playing a stone game. Initially there are n piles of stones and each pile contains ...
- Codeforces 978E:Bus Video System
题目链接:http://codeforces.com/problemset/problem/978/E 题意 一辆公交车,在每站会上一些人或下一些人,车的最大容量为w,问初始车上可能有的乘客的情况数. ...
- MySQL主从、环境搭建、主从配制
1. MySQL主从介绍 2.环境搭建 2.主从配制:修改主配制文件:vim /etc/my.cnf添加: server_id = ###log_bin = diy_name然后保存重启:/ ...
- java-Arrays类
1.Arrays类概述: - 针对数组进行操作的工具类. - 提供了排序,查找等功能. 2.成员方法: - 转换成字符串:public static String toString(int[] a) ...
- django HttpResponse的用法
一.传json字典 def back_json(rquest): #JsonResponse父类是HttpResponse,原码里调用了json.dumps() from django.http im ...
- LeetCode – First Missing Positive
Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...
- 利用 httpmodule 强制所有页面使用同一基类
public class OMSPageChecker : IHttpModule { public void Dispose() { } public void Init(HttpApplicati ...
- Python中字典get方法的使用
Python中字典get方法的使用 说起来,这个功能是否需要学习还真是有待于讨论.其实,知道了字典这种数据结构以后,通过最基本的Python功能也能够实现一个类似的功能.不过,既然内置了这个功能那么我 ...