Ogre实现的Singleton——设计模式

22 篇文章 2 订阅
1 篇文章 0 订阅

Ogre实现的Singleton——设计模式

Singleton就是保证一个类只有一个实例,在Ogre里面有很多Singleton的例子,几乎所有的Manager都是Singleton的实例。比较下Gof里面的Singleton的实现和loki中的Singleton的实现,Ogre的Singleton算是比较简单的。Gof中实现一般是把类的构造函数给Private了然后再加上static的变量和函数实现的。下面来具体看一下Ogre中的Singleton
 

先来看一下Singleton的构造函数是Public的,这样不是大家都能用了?往下看,第一句就是assert(!ms_Singleton); 如果ms_Singleton不是0的话,也就是Singleton<T>已经有了一个自己的对象,那么程序就死翘翘了。如果是0,那么跳过13-16行,直接看17行的
ms_Singleton = static_cast<T*>(this),有没有注意到那个this,出现在这里有点诡异。这里是构造函数,对象的初始化还没有完成呢,那么this指向的东西是什么呢?先来看一下怎么生成一个Singleton的实例。

上面是一个超简单的实现,主要来看一下a = new Intsin(3);这里系统先按照Intsin的大小分配一块内存出来,然后调用Intsin的构造函数,当然要先运行基类Singleton<Intsin>的构造函数,这时Singleton构造函数的this指针应该是指向刚才分配的那个Intsin对象的地址了,虽然里面的东西不完整,但是this指向的对象的基本框架已经有了。所以可以这样使用它。要想知道这时this指针指向的对象到底有什么东西,什么东西没有,可以搜索一下“构造函数的this”看一下有关文章。当构造函数完成的时候,new返回一个指针。这样就完成了一个实例了。
下面来说一下,这个类什么东西没做,用的时候要注意什么。
1.当要实例化一个已经被实例化的类时,会有assert(!ms_Singleton);所以一定不能这样做。
2.对一个实例的指针两次调用delete也是让程序崩溃的好办法
3.Singleton<>不负责对象的解析,所以一定要记得自己delete,记住就一次。
总结下,这里的Singleton的实现比较简单,也很好用,但是程序员要负责的东西比较多。在Ogre中几乎所有的Singleton对象都是在root里面new和delete的。
就这么多吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值