diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_utilities_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_utilities_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,196 @@ + +
+00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). +00002 // All rights reserved. +00003 // This component and the accompanying materials are made available +00004 // under the terms of "Eclipse Public License v1.0" +00005 // which accompanies this distribution, and is available +00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". +00007 // +00008 // Initial Contributors: +00009 // Nokia Corporation - initial contribution. +00010 // +00011 // Contributors: +00012 // +00013 // Description: +00014 // +00015 +00016 #include "CommonFramework.h" +00017 +00018 // +00019 // Definition of the CTestOne class +00020 // +00021 class CTestOne : public CBase +00022 { +00023 public: +00024 ~CTestOne(); +00025 void SetTextL(const TDesC& aData); +00026 private : +00027 HBufC* iText; +00028 }; +00029 +00030 +00031 // +00032 // Implementation of the CTestOne class +00033 // +00034 _LIT(KTxtInsideDestructor,"Executing the CTestOne destructor\n"); +00035 CTestOne::~CTestOne() +00036 { +00037 delete iText; +00038 console->Printf(KTxtInsideDestructor); +00039 } +00040 +00041 void CTestOne::SetTextL(const TDesC& aData) +00042 { +00043 if (iText) +00044 { +00045 delete iText; +00046 iText = NULL; +00047 } +00048 iText = aData.AllocL(); +00049 } +00050 +00051 +00052 +00053 // +00054 // Definition of the RTestTwo class +00055 // +00056 class RTestTwo +00057 { +00058 public: +00059 RTestTwo(TInt aValue); +00060 void Close(); +00061 private : +00062 TInt iX; +00063 }; +00064 +00065 // +00066 // Implementation of the RTestTwo class +00067 // +00068 RTestTwo::RTestTwo(TInt aValue) +00069 : iX(aValue) +00070 { +00071 } +00072 +00073 +00074 _LIT(KTxtCloseRTestTwo,"RTestTwo closing\n"); +00075 +00076 void RTestTwo::Close() +00077 { +00078 console->Printf(KTxtCloseRTestTwo); +00079 } +00080 +00081 +00082 +00083 // +00084 // Definition of the RTestThree class +00085 // +00086 class RTestThree +00087 { +00088 public: +00089 RTestThree(TInt aValue); +00090 void Release(); +00091 private : +00092 TInt iY; +00093 }; +00094 +00095 // +00096 // Implementation of the RTestThree class +00097 // +00098 RTestThree::RTestThree(TInt aValue) +00099 : iY(aValue) +00100 { +00101 } +00102 +00103 +00104 _LIT(KTxtReleaseRTestThree,"RTestThree releasing\n"); +00105 +00106 void RTestThree::Release() +00107 { +00108 console->Printf(KTxtReleaseRTestThree); +00109 } +00110 +00111 // +00112 // main body of the example +00113 // +00114 _LIT(KTxtHelloWorld,"Hello World!"); +00115 LOCAL_C void doExampleL() +00116 { +00117 // 1. Construct a CTestOne object on the heap +00118 CTestOne* one = new (ELeave) CTestOne; +00119 +00120 // Use the CleanupDeletePushL() function to put a TCleanUpItem +00121 // on the cleanup stack +00122 CleanupDeletePushL(one); +00123 +00124 // Exercise the CTestOne object (just to show it doing something) +00125 one->SetTextL(KTxtHelloWorld); +00126 +00127 // Pop and destroy the cleanup item off the cleanup stack. +00128 // The cleanup operation deletes the CTestOne object +00129 CleanupStack::PopAndDestroy(); +00130 +00131 // 2. Construct a RTestTwo object on the program stack. +00132 // +00133 // The value passed is of no significance; it is just +00134 // to show that the class is not trivial. +00135 RTestTwo two(2); +00136 +00137 // Use the CleanupClosePushL() function to put a TCleanUpItem +00138 // on the cleanup stack +00139 CleanupClosePushL(two); +00140 +00141 // Pop and destroy the cleanup item off the cleanup stack. +00142 // The cleanup operation calls the Close() member function of +00143 // the RTestTwo object +00144 CleanupStack::PopAndDestroy(); +00145 +00146 +00147 // 3. Construct a RTestThree object on the program stack. +00148 // +00149 // The value passed is of no significance; it is just +00150 // to show that the class is not trivial. +00151 RTestThree three(3); +00152 +00153 // Use the CleanupClosePushL() function to put a TCleanUpItem +00154 // on the cleanup stack +00155 CleanupReleasePushL(three); +00156 +00157 // Pop and destroy the cleanup item off the cleanup stack. +00158 // The cleanup operation calls the Release() member function of +00159 // the RTestThree object +00160 CleanupStack::PopAndDestroy(); +00161 +00162 // 4. Construct an array of objects on the heap +00163 TInt heapSize1 = User::Heap().Count(); // take a count of the heap size now +00164 +00165 const TInt KNumObjects = 4; +00166 const TInt KStringLength = 10; +00167 TBuf<KStringLength>* four = new (ELeave) TBuf<KStringLength>[KNumObjects]; +00168 // Use the CleanupArrayDeletePushL() function to put a TCleanUpItem +00169 // on the cleanup stack +00170 CleanupArrayDeletePushL(four); +00171 +00172 // Do something that might leave - a simple memory allocation +00173 TInt* mem = (TInt*)User::Alloc(100); +00174 delete mem; +00175 +00176 // Pop and destroy the cleanup item off the cleanup stack. +00177 // The cleanup operation deletes the CTestOne object +00178 CleanupStack::PopAndDestroy(); +00179 if ( User::Heap().Count() == heapSize1 ) +00180 { +00181 _LIT(KFourComplete,"Array deleted\n"); +00182 console->Printf(KFourComplete); +00183 } +00184 } +