如何用C++写一个Singleton 单例模式

来源:互联网 发布:淘宝微淘可以发视频吗 编辑:程序博客网 时间:2024/06/13 09:12

单例模式是比较常用的设计模式,尤其是在游戏设计中会经常用到,在面试中也是非常容易被问到和实现。今天我们来看看如何用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大概这样就可以了,在这里我没有考虑线程安全,只提供一个基本写法。

0 0
原创粉丝点击