Hi This is Singleton class program, please let me know any changes required in this code...............

#include <iostream>
using namespace std;
class Singleton
{
private:
static bool instanceFlag;
static Singleton *single;
Singleton()
{
//private constructor
}
public:
static Singleton* getInstance();
void method();
~Singleton()
{
instanceFlag = false;
}
};
bool Singleton::instanceFlag = false;
Singleton* Singleton::single = NULL;
Singleton* Singleton::getInstance()
{
if(! instanceFlag)
{
single = new Singleton();
instanceFlag = true;
return single;
}
else
{
return single;
}
}
void Singleton::method()
{
cout << "Method of the singleton class" << endl;
}
int main()
{
Singleton *sc1,*sc2;
sc1 = Singleton::getInstance();
sc1->method();
sc2 = Singleton::getInstance();
sc2->method();
return 0;
}

neoguru.....welcome aboard.I reccommend taking a look at the Rules & FAQ for the daniweb forum. Please do not re-open old threads....i'm pretty sure he'd get the answer before an entire year....look at the posting date of the question before you reply. Again ,welcome.

Comments
Yes, tell it like it is to that website spammer.

neoguru.....welcome aboard.I reccommend taking a look at the Rules & FAQ for the daniweb forum. Please do not re-open old threads....i'm pretty sure he'd get the answer before an entire year....look at the posting date of the question before you reply. Again ,welcome.

Ok, sorry, chief

The above example compiles pretty fine. I have a query. The two lines below
bool Singleton::instanceFlag = false;
Singleton* Singleton::single = NULL

Should have come inside the constructor of this class ryt?.

>>Should have come inside the constructor of this class ryt?.

No. static objects must also be declared globally just like any other global object. Those lines were stated correctly in the original thread of 3 years ago.

Edited 7 Years Ago by Ancient Dragon: n/a

I think there is better way to implement this :-) cool and safe

#include <iostream>
using namespace std;

CSingleton.h
==========

#ifndef __CSINGLETON__
#define __CSINGLETON__

class CSingleton {
public:
    static CSingleton* getInstance();
    void destroyInstance();
    void doSomething();

private:
    CSingleton() {}
    ~CSingleton(){}
    static CSingleton* m_pInstance;
};
#endif

CSingleton.cpp
============

#include "CSingleton.h"

CSingleton* CSingleton::m_pInstance = NULL;

CSingleton* CSingleton::getInstance() {
     if(NULL == m_pInstance ) {
            m_pInstance = new CSingleton();
     }
     return m_pInstance;
}

void CSingleton::destroyInstance() {
     delete m_pInstance;
     m_pInstance = NULL;
}

void CSingleton::doSomething() {
     cout<<"Am one and only one" << endl;
}

main.cpp
=======

#include "CSingleton.h"

int main()
{
    CSingleton* inst = CSingleton::getInstance();
    inst->doSomething();
    inst->destroyInstance();
}

Hi This is Singleton class program, please let me know any changes required in this code...............

#include <iostream>
using namespace std;
class Singleton
{
private:
static bool instanceFlag;
static Singleton *single;
Singleton()
{
//private constructor
}
public:
static Singleton* getInstance();
void method();
~Singleton()
{
instanceFlag = false;
}
};
bool Singleton::instanceFlag = false;
Singleton* Singleton::single = NULL;
Singleton* Singleton::getInstance()
{
if(! instanceFlag)
{
single = new Singleton();
instanceFlag = true;
return single;
}
else
{
return single;
}
}
void Singleton::method()
{
cout << "Method of the singleton class" << endl;
}
int main()
{
Singleton *sc1,*sc2;
sc1 = Singleton::getInstance();
sc1->method();
sc2 = Singleton::getInstance();
sc2->method();
return 0;
}

Edited 7 Years Ago by Nick Evan: Add code-tags

I have a doubt, does both sc1and sc2 refers same instance or not

sc1 = Singleton::getInstance();
sc2 = Singleton::getInstance();

Ya it will be...
You could have been easily confirmed it by writing a simple sample application.

Thanks,
LJ

Edited 6 Years Ago by MyNameIsLJ: n/a

This article has been dead for over six months. Start a new discussion instead.