0

次のコードを検討してください。

#include <iostream>

class Singleton
{
public:
    // GetInstance returns an instance to an existing Singleton object
    static Singleton& GetInstance()
    {
        static Singleton instance;
        return instance;
    }

    // Destructor
    ~Singleton()
    {
        std::cout << "Singleton destructor" << std::endl;
    }
private:
    // Private constructor
    Singleton()
    {
        std::cout << "Singleton constructor" << std::endl;
    }
};

int main()
{
    Singleton mySingleton = Singleton::GetInstance();

    return 0;
}

これの出力は次のとおりです。

Singleton constructor
Singleton destructor
Singleton destructor

参照変数mySingletonがクリーンアップされているように見えるため、デストラクタが 2 回呼び出されます。この動作を回避する方法はありますか?

4

1 に答える 1

3

ここでインスタンスのコピーを作成しています:

Singleton mySingleton = Singleton::GetInstance();

コピー コンストラクターと代入演算子もプライベートにしたい場合は、参照を取得する必要があります。

Singleton& mySingleton = Singleton::GetInstance();
于 2013-02-21T21:44:41.937 に答える