Symbian 防止RPointerArray内存泄露

#include "CommonFramework.h"

class CTest : public CBase
    {
public:
    staticCTest* NewLC(const TDesC& aName)
       {
       CTest* self = new (ELeave) CTest();
       CleanupStack::PushL(self);
       self->ConstructL(aName);
       return self;
       }
    staticCTest* NewL(const TDesC& aName)
       {
       CTest* self = NewLC(aName);
       CleanupStack::Pop(self);
       return self;
       }
    voidDisplay()
       {
       console->Printf(_L("%S/n"), iName);
       }
   ~CTest()
       {
       console->Printf(_L("~CTest() called./n"));
       delete iName;
       }
protected:
   CTest()
       {
       }
    voidConstructL(const TDesC& aName)
       {
       iName = aName.AllocL();
       }
private:
    HBufC*iName;
    };

template <typename T>
void ReleaseRPointerArray(TAny* aArray)
    {
   RPointerArray<T>* array =static_cast<RPointerArray<T>*>(aArray);
   array->ResetAndDestroy();
   array->Close();
    }

LOCAL_C void doExampleL()
    {
   RPointerArray<CTest>* array = new(ELeave) RPointerArray<CTest>;
   CleanupStack::PushL(TCleanupItem(ReleaseRPointerArray<CTest>,array));

   _LIT(KName1, "Allan");
    _LIT(KName2,"George");
    _LIT(KName3,"Larry");

    CTest*test1 = CTest::NewL(KName1);
   CleanupStack::PushL(test1);
   array->AppendL(test1);
   CleanupStack::Pop(test1);

    CTest*test2 = CTest::NewL(KName2);
   CleanupStack::PushL(test2);
   array->AppendL(test2);
   CleanupStack::Pop(test2);

    CTest*test3 = CTest::NewL(KName3);
   CleanupStack::PushL(test3);
   array->AppendL(test3);
   CleanupStack::Pop(test3);

   RPointerArray<CTest>&pointerArray = *array;
    for (TIntindex = array->Count(); --index >=0;)
       {
       pointerArray[index]->Display();
       }
  
   CleanupStack::PopAndDestroy(array);
    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值