I have used singleton calss following the example:
But i get the error as "Unresolved external symbols"
this is the code i tried out:
#include<iostream>
using namespace std;
class singleton
{
int value;
static singleton *instance;
protected:
singleton()
{
value=0;
}
public:
static void initialize()
{
if(instance==NULL)
singleton();
else
cout<<"An instance of singleton already exist...";
}
static singleton& getInstance()
{
return *instance;
}
int getValue()
{
return value;
}
};
void main()
{
singleton::initialize();
}
A little bit explanation on Singleton classes would be really great. The scenario its used. advantages and drawbacks. Alternatives to Singleton. etc
For a start, I think:
should be:
The way you have it, you're not actually storing the newly instantiated object so
instance
will always be null.It's also good form to explicitly set statics with:
(outside the class definition).
In fact, it's possibly better to start with the baseline singleton code and work your way up from there. This is a standard-form pointer version:
You can see that both pointers are the same from the output:
Or the reference version, since that seems to be what you're aiming for:
In your definition file, you need the definition of
instance
:You should separate your definition from your declaration if you want to use the singleton in multiple translation units.
Also, the way it's usually done, is not having an initialize method:
There are lots of discussions on SO whether singletons are good or bad, with the general consensus that they should be avoided. You should also check them out.
You need to define the static member variable
instance
. Somewhere in global scope (for example between the class and themain
function) add the following line:Also, you can put the initialization of the instance in
getInstance
:and remove the
initialize
function.You might also want to make the constructor private instead of protected, as well as having private copy-constructor and assignment functions to prevent copying and assignment.