【问题标题】:Initializing and Cleanup in Singleton Class单例类中的初始化和清理
【发布时间】:2013-06-24 09:15:13
【问题描述】:

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

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

那么我该如何实现呢?

【问题讨论】:

  • 我不是 C++ 专家,但你不能在调用构造函数后做singleton.member = new whatever; 吗?

标签: c++ oop singleton


【解决方案1】:

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

【讨论】:

  • 我知道我错过了一些非常基本的东西:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多