Singleton类中的初始化和清理

Initializing and Cleanup in Singleton Class

本文关键字:初始化 Singleton      更新时间:2023-10-16

我有一个像这样的单例类:

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()是一个静态函数,我不能从它访问成员变量,也不能将这些变量作为静态变量。

那么我该如何实现呢?

您可以重载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;
}