質問
私は最近、コードで取り組んできた、このようになります。
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つのインスタンスがあるということです。これはなぜでしょうか?
解決
試験の最初の行::テストシングルトンの別のインスタンスを作成する(スタック上に、ローカル基準ではありません)。あなたはシングルトンにデフォルトコンストラクタを定義し、それが民間することによって、これを防ぐことができます。現状では、誰もがシングルトンのインスタンスを作成することができます。
所属していません StackOverflow