468,469 Members | 1,971 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,469 developers. It's quick & easy.

Alternative was to implement a Singleton Design Pattern

Hello,

currently I am reading the book "Effective C++ Third Edition" from Scott
Meyers. While Reading Item 4 (Make sure that objects are initialized
before they're used) I got an idea how to improve the way to implement
the Singlton Design Pattern.

This is the way I used to do it:

Singleton.h
----------

class Singleton {
public:
static Singleton* getInstance() {
if (!m_instance) {
m_instance = new Singleton();
}

return m_instance;
}

private:
Singleton() { }
~Singleton() { }
static Singleton* m_instance;
}

Singleton.cpp
-------------

Singleton* Singleton::m_instance = 0;


This is the way I am planning to do it in future:

Singleton.h
-----------

class Singleton {
public:
static Singleton* getInstance() {
static Singleton instance;
return &instance;
}

private:
Singleton() { }
~Singleton() { }
};

(Source is only showing the concept. I didn't compile it.)
I see the following pros:
- No potentional memory leak when process terminates.
- Less source code required.
- Not necessarely a .cpp file required for the static member.

Are there any cons I am missing?

Thanks for your thoughts,
Daniel Kay
Sep 3 '06 #1
2 2395
Daniel Kay wrote:
This is the way I am planning to do it in future:

Singleton.h
-----------

class Singleton {
public:
static Singleton* getInstance() {
static Singleton instance;
return &instance;
}

private:
Singleton() { }
~Singleton() { }
};

(Source is only showing the concept. I didn't compile it.)
I see the following pros:
- No potentional memory leak when process terminates.
- Less source code required.
- Not necessarely a .cpp file required for the static member.

Are there any cons I am missing?
See Alexandrescu's "Modern C++ Design". It discusses singletons in more
detail than you'd ever want to know, and in particular, he discusses
this idiom (he calls it a "Meyers Singleton", since Meyers is the
earliest cite he found it in, I guess).
Sep 3 '06 #2
Daniel Kay wrote:
I see the following pros:
- No potentional memory leak when process terminates.
- Less source code required.
- Not necessarely a .cpp file required for the static member.
singleton would prefferably be implemented as a template
so this is not realy a benefit
>
Are there any cons I am missing?
I don't think there is a single implementation that satisfies
all possible requirements.

few cons might arrise

- No control over singleton's liffetime, can't delete it
see http://www.research.ibm.com/designpa...s/ph-jun96.txt
<no link intentional>
- Singleton must have default constructor
- if Singleton's constructor throws you might not be able to recover
- I can do
delete Singleton::getInstance()
invoking undefined behaviour, bether return reference
instead of a pointer

otherwise it's fine :)

Sep 6 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Neil Zanella | last post: by
7 posts views Thread by Tim Clacy | last post: by
3 posts views Thread by Alicia Roberts | last post: by
14 posts views Thread by Paul Bromley | last post: by
9 posts views Thread by FluffyCat | last post: by
5 posts views Thread by Lie | last post: by
reply views Thread by NPC403 | last post: by
1 post views Thread by kmladenovski | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.