无论是太阳下,还是风雨中,都要成长!
在前面的例子中,我们看到:采用 new 来为单件对象分配空间,如果采用手动调用 delete 或封装了 delete 的 Release 操作,一旦遇到全局对象的析构有调用单件对象,就会使得无法在代码中找到适合释放单件对象的时机。那么,是否可以让系统来自动选择时机,调用释放呢?如果可以,又该怎么在代码中构建单件对象的自动释放机制呢? 对这两个问题,在进行了一番思考和尝试后,终于找到了答案 —— 内建只有一个析构方法的结构体,定义一个静态的该结构体的变量,并在结构体的析构中释放单件对象。下文将就此给出 Demo,还望有高手能给出更好的方案。(从前面内容,我们已经知道,单件对象的指针通过静态类成员变量进行存储,并通过 new 分配的方式,存在在着线程安全的问题。同理,下面Demo的单件类A在多线程环境使用时,自然也存在线程安全的问题。)
Demo代码如下:
运行后的结果:
综合Demo代码和运行结果,我们可以看到,对于单件类A的对象释放者采用了类的静态成员的方式来定义,其结果是,单件类A的对象释放时机仍然不对。
再看C,代码中new 所得的对象指针交由一局部静态变量以保证 new 只会执行一次(从而保证了线程安全), 而单件对象的释放者就定义在紧挨 new 的前面(事实上,也可以定义在紧挨 new 的后面)。接着是执行结果,完全OK! 哈哈~,值得推荐的第二种C++单件类构建模式终于也出炉了,那就是上例Demo中,单件类C的构建模式。
至此,《Singleton模式——C++应用》全部完成,因为还是第一次写技术博客,写得不好,还请各位看官见谅!
嗯~,突然发现,我漏写了对这全部四篇内容的一个总结,……还是算了,就请各位原谅我这次的偷懒咯!~
posted on 2012-03-14 01:07 青碧竹 阅读(329) 评论(0) 编辑 收藏 引用 所属分类: 设计模式
Powered by: C++博客 Copyright © 青碧竹