Sign in to follow this  
TEUTON

Singleton Problem

Recommended Posts

This is not the exact code which I saw in the book. But it used this logic to create a Singleton. I guess this is not right. What do you say?
#include <iostream>
using namespace std;
class a{
         int x;
	public:
		a()
		{
		static count=0;
		if(count > 0)
			exit(0);
		else
			{
			count++;
			x=10;
			}
		}
	};
int main(int argc, char *argv[])
{

a obj;
a obj2;
return EXIT_SUCCESS;
}

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
It's silly. Read this:
http://www.gamedev.net/reference/articles/article1825.asp

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
Quote:
Original post by TEUTON
But it used this logic to create a Singleton. I guess this is not right. What do you say?


I agree. Singletons are illogical. [wink]

Share this post


Link to post
Share on other sites
The only usefull use of the singleton pattern is in resolving problems with the initialization order of global and static objects.

In one compilation unit, you have some sort of global structure. Say, an std::map.
In another compilation unit, you have some sort of static that uses the global structure during construction, wether directly or through some global/static function somewhere.
Now, since the initialization order of statics and globals in different compilation units is undefined, this might work... or it might not. If the map is initialized first, it works. If not, it doesn't.
You can fix this using a singleton. Create a function that returns a reference to the map, and everywhere you access the map, use that function instead. Instead of mapname.whatever, set it up so you can do mapname().whatever. Define the function to contain a static instance of the map and return it, like so:

std::map<int,int>& mapnam() {
static std::map<int,int> map;
return map;
}

Initialization problem solved; and there you have the only thing the singleton pattern does better than a plain old global.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this