Symbian3/SDK/Source/GUID-7250950C-5502-5ACE-864B-0EFD5C253053-GENID-1-8-1-6-1-1-4-1-6-1-10-1.dita
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Symbian3/SDK/Source/GUID-7250950C-5502-5ACE-864B-0EFD5C253053-GENID-1-8-1-6-1-1-4-1-6-1-10-1.dita Wed Mar 31 11:11:55 2010 +0100
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
+<!-- This component and the accompanying materials are made available under the terms of the License
+"Eclipse Public License v1.0" which accompanies this distribution,
+and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
+<!-- Initial Contributors:
+ Nokia Corporation - initial contribution.
+Contributors:
+-->
+<!DOCTYPE concept
+ PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
+<concept id="GUID-7250950C-5502-5ACE-864B-0EFD5C253053-GENID-1-8-1-6-1-1-4-1-6-1-10-1" xml:lang="en"><title>How
+to create a singleton</title><prolog><metadata><keywords/></metadata></prolog><conbody>
+<p>The <xref href="GUID-F0C084E2-C683-39E2-A131-77FE3206A02C.dita"><apiname>CCoeStatic</apiname></xref> class allows singleton classes to be
+created and stored by the environment (<xref href="GUID-12A9389D-363B-3F54-857F-89EE0EDCDF40.dita"><apiname>CCoeEnv</apiname></xref>) in Thread
+Local Storage (TLS). This provides a means of creating writeable global static
+data. </p>
+<p> <filepath>MySingleton.h</filepath> </p>
+<codeblock id="GUID-B526F5B3-FBC7-5563-8F5C-37B01A0EC28D-GENID-1-8-1-6-1-1-4-1-6-1-10-1-2-3" xml:space="preserve">
+class CMySingleton : public CCoeStatic
+ {
+public:
+ static CMySingleton* SelfL() ; // Slightly slower
+ static CMySingleton* SelfL( CCoeEnv* aCoeEnv ) ; // Slightly faster
+ ...
+private:
+ CMySingleton() ;
+ ~CMySingleton() ;
+ } ;
+</codeblock>
+<p> <filepath>MySingleton.cpp</filepath> </p>
+<codeblock id="GUID-FD7053EB-8769-5C04-98E2-3C8EC8589A10-GENID-1-8-1-6-1-1-4-1-6-1-10-1-2-5" xml:space="preserve">
+const TUid KUidMySingleton = {0x10204232} ;
+
+CMySingleton::CMySingleton() : CCoeStatic( KUidMySingleton, CCoeStatic::EThread /*or EApp*/ )
+ {
+ }
+
+CMySingleton* CMySingleton::SelfL()
+ {
+ CMySingleton* self = static_cast<CMySingleton*>( CCoeStatic::Static( KUidMySingleton ) ) ;
+ if(!self)
+ {
+ self = new( ELeave ) CMySingleton() ;
+ }
+ return self ;
+ }
+
+CMySingleton* CMySingleton::SelfL( CCoeEnv* aCoeEnv )
+ {
+ CMySingleton* self = static_cast<CMySingleton*>( aCoeEnv->FindStatic( KUidMySingleton ) ) ;
+ if( !self )
+ {
+ self = new( ELeave ) CMySingleton() ;
+ }
+ return self ;
+ }
+</codeblock>
+<p>A singleton must be given a UID. When it is instantiated for the first
+time the base class constructor adds it to the list of singletons in the environment.
+Any subsequent attempts to instantiate the same singleton will result in a
+panic. </p>
+<p>Singletons may be given a <b>destruction priority</b> and a <b>scope</b>. </p>
+<p>The <b>destruction priority</b> determines when the singleton is destroyed
+relative to any other singletons in the environment's list and relative to
+the App Ui. The default priority, <codeph>EDefaultDestructionPriority</codeph>,
+is 100. The higher the priority, the earlier the singleton will be destroyed.
+A negative value indicates that the singleton should be destroyed after the
+AppUi. The more negative the value, the later the destruction. </p>
+<p>The <b>scope</b> may be <codeph>EThread</codeph> (the default) or <codeph>EApp</codeph> and
+determines the visibility of the singleton. </p>
+<p>Once a singleton has been created it may be accessed through the <xref href="GUID-12A9389D-363B-3F54-857F-89EE0EDCDF40.dita"><apiname>CCoeEnv</apiname></xref> API. </p>
+<codeblock id="GUID-7B6E1AE6-30E6-585C-84AC-5C385F0894D3-GENID-1-8-1-6-1-1-4-1-6-1-10-1-2-11" xml:space="preserve">// Singleton access
+IMPORT_C static CCoeStatic* Static( TUid aUid ) ;
+IMPORT_C CCoeStatic* FindStatic( TUid aUid ) ;</codeblock>
+</conbody></concept>
\ No newline at end of file