symbian中如何使用单态类

        单态类,即SingleTon 设计模式。是c++设计模式中是最简单,又最有用的设计模式。在标准的c++程序设计中使用单态类很简单。无非就是利用一个静态的成员变量和静态的成员函数来实现。使用单态类最重要的目的就是使类只能有一个实例,以达到数据共享的目的。但是在symbian中,不易使用静态成员变量,又不能使用全局变量类共享数据。尤其中s60 2.0版本以上更是不支持静态成员变量的存在。那么,要求共享一份数据时,要怎么实现呢?

        在SymbianOS中,在每个线程上加载的DLL都有一个线程指定的机器字,可以被用来写或读,除此之外没有其他静态内存存在了。因而,我们可以利用Tls类实现数据共享的目的。我们可以把需要实现数据共享的变量归类放在一个单独的类中,由该类来使用Tls,达到数据的共享。以下是简单的Tls演示的源代码:

  1. // CMyData.h
  2. class CMyData
  3. {
  4. public:
  5.     static CMyData* NewL();
  6.     void Free();
  7. private:
  8.     CMyData();    //构造函数私有。该类便不能拷贝。
  9.     ~CMyData();
  10. }
  11. //CMyData.cpp
  12. #include "MyData.h"
  13. CMyData::CMyData()
  14. {
  15. }
  16. CMyData::~CMyData()
  17. {
  18. }
  19. CMyData* RMyData::NewL()
  20. {
  21.     CMyData *instance;
  22.     
  23.     if(Dll::Tls() == NULL)
  24.     {
  25.         instance = new (ELeave) CMyData();
  26.         CleanupStack::PushL(instance);
  27.         TInt err = Dll::SetTls(static_cast<TAny*>( instance ));
  28.         CleanupStack::Pop(instance);
  29.         if ( err == KErrNone )
  30.         {
  31.             return instance;
  32.         }
  33.         else
  34.         {
  35.             delete instance;
  36.             User::Leave( err );
  37.             return NULL;
  38.         }
  39.     }
  40.     else
  41.     {
  42.         instance = static_cast<CMyData*>( Dll::Tls() );
  43.         return instance;
  44.     }    
  45. }
  46. void CMyData::Free()
  47. {
  48.     CMyData *instance;
  49.     if(Dll::Tls())
  50.     {
  51.         instance = static_cast<CMyData*>( Dll::Tls() );
  52.         Dll::FreeTls();
  53.         delete instance;
  54.     }
  55. }

        其他类可以通过CMyData::NewL()来实现该类中数据的存取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值