Ogre

——静下心,坐坐……
posts - 4, comments - 2, trackbacks - 0, articles - 3
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

C++中更好地使用Singleton(单件)模式

分类:设计模式
2006.7.22 17:50 作者:黑猫侦探 | 评论:0 | 阅读:776

所谓Singleton模式,其主要作用是保证在应用程序中,一个类Class只有一个实例存在。 在软件开发中,Singleton模式应该是使用比较广泛的一个模式了,例如,实现Log系统的类、全局配置的类,以及建立目录、数据库连接的类、全局统计的类等等,都可以使用Singleton模式来实现。因为通常这些类,只允许一个实例存在,而且该实例可以在其他任何对象、任何函数中都可以被调用。

在C++中使用Singleton模式,要注意的问题,也是如何管理该对象所使用的内存了,呵呵!对内存的管理,真的是一个老生常谈的事情,可是又不得不考虑!是呀,Singleton对象的内存怎么释放呢?因为该对象通常是为系统中所有其他对象服务的,而C++中又没有垃圾回收机制。正因为如此,很多人选择不释放其内存,因为通常Singleton对象的生命周期,会一直到应用程序运行结束,程序结束后,可以由操作系统来回收内存。当前,大多数的操作系统都可以完成这个工作,可这实在不是一个好习惯。

有没有更好的方法呢?当然有,那就是不要使用指针,即,不要象《设计模式》这本书里面叙述的那样实现Singleton,而是如下来实现:

class SingletonTest

{

protected:

    SingletonTest() {} // 将构造函数保护起来

public

    static SingletonTest& getInstance(); // 使用instance来创建对象

};

SingletonTest& SingletonTest::getInstance()
{
    static SingletonTest instance; // 申明对象时,使用static
    return instance;
}

使用该对象的方法如下:

    SingletonTest::getInstance().函数名;

或:

    SingletonTest* test = &SingletonTest::SingletonTest();

    test->函数名

由于getInstance中,申明对象时使用了static,所以调用getInstance只会运行一次申明对象的那条语句,也就是,只会在系统中创建一个SingletonTest实例,又由于所创建的SingletonTest实例不是指针,在程序结束时,会将内存释放给操作系统。

 

Feedback

# re: C++中更好地使用Singleton(单件)模式  回复  更多评论   

2010-03-31 23:17 by Uniker
这个比较高~~呵呵……想法不错

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理