質問

私は最近、コードで取り組んできた、このようになります。

using namespace std;

class Singleton {
    public:
        static Singleton& getInstance();
        int val;
};

Singleton &Singleton::getInstance() {
    static Singleton s;
    return s;
}

class Test {
    public:
        Test(Singleton &singleton1);
};

Test::Test(Singleton &singleton1) {
    Singleton singleton2 = Singleton::getInstance();
    singleton2.val = 1;
    if(singleton1.val == singleton2.val) {
        cout << "Match\n";
    } else {
        cout << "No Match " << singleton1.val << " - " << singleton2.val << "\n";
    }   
}

int main() {
    Singleton singleton = Singleton::getInstance();
    singleton.val = 2;
    Test t(singleton);
}

私はそれを実行するたびに、私は「いいえマッチ」を取得します。しかし、私はクラスの1つのインスタンスがあるはずですので、試合を期待しています。何をGDBでのステップ実行時に、私が言うことができることはシングルトンの2つのインスタンスがあるということです。これはなぜでしょうか?

役に立ちましたか?

解決

試験の最初の行::テストシングルトンの別のインスタンスを作成する(スタック上に、ローカル基準ではありません)。あなたはシングルトンにデフォルトコンストラクタを定義し、それが民間することによって、これを防ぐことができます。現状では、誰もがシングルトンのインスタンスを作成することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top