单例类中的初始化和清理

时间:2013-06-24 09:15:13

标签: c++ oop singleton

我有一个像这样的单身人士课程:

myClass.h

class myClass
{


private:

    static myClass *singleton;
    myClass ( myClass const& );
    myClass& operator = ( myClass const& );
    myClass (  );


public:

    static myClass* Instance (  );
    ~myClass (  );
};

myClass.cpp

myClass::myClass (  ) {  };

myClass* myClass::singleton = NULL;

myClass* myClass::Instance (  )
{

    if ( !singleton )
    {

        singleton = new myClass;

        // Initialization

    }

    return singleton;

};


myClass::~myClass ( ) 
{

   // Cleanup           

};

现在我需要在返回对象实例之前进行一些初始化,并在析构函数中进行一些清理。由于myClass * myClass :: Instance()是一个静态函数,我无法从中访问成员变量,我也不能将这些变量作为静态变量。

那我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

您可以将myClass::Instance重载为带参数或无参数并重载private构造函数:

private:

   myClass();
   myClass(string);

....

public:

//Pass a value to your singleton object

myClass* myClass::Instance(string str)
{

    if ( !singleton )
    {

        singleton = new myClass(str); //overload private constructor and pass values

        // Initialization

    }

    return singleton;
}

//pass no value to singleton object

myClass* myClass::Instance()
{

    if ( !singleton )
    {

        singleton = new myClass(); //overload private constructor
        // Initialization

    }

    return singleton;
}