2

私はこのようなシングルトンクラスを持っています:

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 ( ) は静的関数であるため、そこからメンバー変数にアクセスすることはできず、それらの変数を静的にすることもできません。

どうすればそれを達成できますか?

4

1 に答える 1

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;
}
于 2013-06-24T09:21:06.343 に答える