博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何用C++写一个Singleton 单例模式
阅读量:3675 次
发布时间:2019-05-21

本文共 905 字,大约阅读时间需要 3 分钟。

单例模式是比较常用的设计模式,尤其是在游戏设计中会经常用到,在面试中也是非常容易被问到和实现。今天我们来看看如何用C++来实现一个singleton。

单例模式的主要特性是只能实例化一个对象,在游戏中我们会有各种资源,我们也会在各个地方需要访问这些资源,那么如何得到这些资源呢?我们可以写一个资源管理类来获得各种你想要的资源,问题是在不同的类中如果你想获取游戏资源,就要新建一个资源管理类,这样其实是对内存的浪费。我们其实只需要一个资源管理类就够了,那么这时候就可以使用singleton。

既然只能实例化一个对象,那么就不能让用户直接用new来实例化对象的,因为这样用户将可以实例化很多个对象。我们知道在实例化对象的时候会调用构造函数,为了禁止用户在外部实例化对象,我们可以将构造函数私有化。同样,我们也不应该允许用户copy一个实例,我们可以通过将copy构造函数和赋值函数私有化来禁止copy操作。既然无法在类外实例化对象,用户要如何获得一个对象呢?我们可以提供一个接口,用户需要一个此类对象的时候可以通过这个接口获得。嗯,一个简单的singleton必须包含的内容就这些啦,我们来看看代码怎么实现:

class GameData{public:	static GameData* getInstance()	{		if(instance == NULL)			instance = new GameData();		return instance;	}private:	static GameData* instance;	GameData();	GameData(const GameData& data);	GameData& operator=(const GameData& data);};
在使用的时候我们需要在外部对静态实例初始化:

GameData* GameData::instance = NULL;
程序结束时删除此对象:

delete GameData::getInstance();
一个基本的singleton大概这样就可以了,在这里我没有考虑线程安全,只提供一个基本写法。

转载地址:http://hilbn.baihongyu.com/

你可能感兴趣的文章
Day 1 一只超级菜鸟的起步
查看>>
Day 4 小蔡姬目前还是咸鱼
查看>>
Day 6 哈佛cs50 & R语言 lattice plotting与三个color package
查看>>
Day 8 SQL语句简单知识学习
查看>>
姗姗来迟的day11
查看>>
Day 18 ggplot2及clustering 的学习
查看>>
mysql安装配置-基本操作总结(windows-mysql5.7版本zip安装包)
查看>>
CS入门-系统学习-计划
查看>>
CS入门学习笔记1-MIT 6.00.1x
查看>>
CS入门学习笔记2-MIT 6.00.1x
查看>>
CS入门学习笔记3-廖雪峰python教程-函数
查看>>
CS入门学习笔记4-MIT 6.00.1x
查看>>
CS入门学习笔记5-MIT 6.00.1x
查看>>
CS入门学习笔记6-MIT 6.00.1x-tuple,list,dictionary
查看>>
数据类型转换!
查看>>
运算符
查看>>
JS的流程控制
查看>>
JavaScript 数组的学习
查看>>
暴力猴安装方法
查看>>
还在手动创建实体类手动CRUD吗?来试试Mybatis自动化吧,反向生成实体类,接口,mapper.xml,让你效率飞涨
查看>>