Pelaksanaan Singleton Meyer, dipersembahkan sebagai instance Singleton& statik(), menimbulkan persoalan berkenaan kefungsian singletonnya.
Sifat tunggal berpunca daripada kata kunci statik. Tempoh storan statik untuk pembolehubah tempatan bermakna hanya satu kejadian wujud sepanjang program.
Pertimbangkan pseudokod setara ini (bukan kod C 98 sebenar):
static bool __guard = false; static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard ) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*&>(__storage); }
Ini secara kasarnya merangkumi gelagat asal pelaksanaan.
Dalam pelaksanaan C 11 sebenar, pembolehubah pengawal digunakan untuk setiap statik, bertindak sebagai penghalang untuk benang.
Kedua-dua pelaksanaan menguatkuasakan integriti tunggal, tetapi berbeza dalam pengendalian benang dan kerumitan kod.
Meyer's Pelaksanaan:
Pelaksanaan Wikipedia:
Pelaksanaan Meyer sememangnya Singleton kerana tempoh storan statik yang menghalang berbilang instantiations. Pilihan antara kedua-dua pelaksanaan bergantung pada aplikasi khusus dan pertimbangan multithreading.
Atas ialah kandungan terperinci Adakah Pelaksanaan Singleton Meyer Benar-Benar Satu Singleton, dan Bagaimanakah Ia Dibandingkan dengan Alternatif Selamat Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!