×
Namespaces

Variants
Actions
(Difference between revisions)

Implementing a Singleton using Symbian CCoeStatic class

From Nokia Developer Wiki
Jump to: navigation, search
sunil.shetty (Talk | contribs)
savaj (Talk | contribs)
(Added UID for singleton.)
Line 48: Line 48:
  
 
<code cpp>
 
<code cpp>
 +
 +
static const TUid KUidMySingleton = { 0x100000E9 };
 +
 
// -------------------------------------------------------------------------
 
// -------------------------------------------------------------------------
 
// CMySingleton::CMySingleton
 
// CMySingleton::CMySingleton

Revision as of 07:14, 28 September 2009

{{{width}}}

Contents

Overview

The singleton pattern is one of the best-known patterns in software engineering. Essentially, a singleton is a class which only allows a single instance of itself to be created, and usually gives simple access to that instance.

Using class CCoeStatic to implement a singleton class

A simpler way of implementing singletons than using TLS is possible for those classes which use the CCoeEnv class. Since CCoeEnv is a part of the UI control framework, this concerns only applications, not application engines. This applies also to S60 3rd Edition and later editions.

Singleton implementation based on CCoeStatic

CMySingleton.h

/**
* Example implementation of a singleton class by means of inheriting
* from CCoeStatic.
*/

class CMySingleton : public CCoeStatic
{
public: // constructors and destructor
/**
* Returns an instance of this class. When called for the first
* time, a new instance is created and returned. After that,
* calling InstanceL returns the same instance that was created
* earlier.
*
* @return A pointer to a CMySingleton object
*/

static CMySingleton* InstanceL();
private: // constructor
/**
* Default constructor is private because we are using the
* singleton design pattern.
*/

CMySingleton();
...
};


CMySingleton.cpp

static const TUid KUidMySingleton = { 0x100000E9 };
 
// -------------------------------------------------------------------------
// CMySingleton::CMySingleton
// C++ default constructor. It is private because we are using the
// singleton design pattern.
// -------------------------------------------------------------------------
CMySingleton::CMySingleton()
: CCoeStatic( KUidMySingleton )
{
}
// -------------------------------------------------------------------------
// CMySingleton::InstanceL
// Returns an instance of this class. When called for the first time,
// a new instance is created and returned. After that, calling
// InstanceL returns the same instance that was created earlier.
// Note that the UID passed to CCoeEnv::Static needs to be unique.
// -------------------------------------------------------------------------
CMySingleton* CMySingleton::InstanceL()
{
CMySingleton* instance = static_cast<CMySingleton*>
( CCoeEnv::Static( KUidMySingleton ) );
if ( !instance )
{
instance = new ( ELeave ) CMySingleton;
CleanupStack::PushL( instance );
instance->ConstructL();
CleanupStack::Pop();
}
return instance;
}
198 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×