关闭

Singleton模式的一个实现

743人阅读 评论(0) 收藏 举报

设计模式上的singleton模式是声明了一个static的Singleton指针,当getInstance被调用的时候再new出一个对象然后赋值给这个指针。然而这样会有一个问题,即这个new出来的对象应该何时释放?如果只是内存没有释放问题还不大,但是如果这个Singleton还占有资源,而程序退出还没有释放就会有问题了。

这里有一个Singleton的实现:

class CSingleton
{
private:
 CSingleton()
 {
  std::cout << "Singleton contructed!" << std::endl;
 }
 ~CSingleton()
 {
  std::cout << "Singleton destructed!" << std::endl;
  system("pause");
 }
public:
 static CSingleton* getInstance()
 {
  static CSingleton instance;
  return &instance;
 }
};

这样,当程序结束时就会调用这个Singleton的解析函数。而且由于instance是个局部变量,如果getInstance没有调用,instance对象也不会被初始化。

下面是测试程序:


int _tmain(int argc, _TCHAR* argv[])
{
 std::cout << "Start!" << std::endl;
 CSingleton* singleton = CSingleton::getInstance();
 std::cout << "End!" << std::endl;
 return 0;
}

 

输出结果是:

Start!
Singleton contructed!
End!
Singleton destructed!

可以看出这种singleton实现比较有优势。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9551次
    • 积分:178
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论
  • NURBS备忘录(一)

    melody110: 1.节点只要注意最前面和最后面的重合度,剩下的可以考虑均匀分布 2.控制顶点和阶数没有直接关系 最...

  • NURBS备忘录(一)

    talent568: 我在做NURBS拟合方面的课题,如果有研究这方面的朋友,希望一起交流,QQ6217883 NURBS...

  • NURBS备忘录(一)

    hh: 最近也在看关于B样条的内容,有些不明白的地方想请教一下 在使用递归算法时 1.基函数中的节点如何选取...