Pelaksanaan Tunggal Meyers: Menyingkap Kesendirian
Soalan:
Bagaimana keadaan Meyers' pelaksanaan yang dimulakan malas bagi Singleton dalam C , seperti yang dilihat di bawah, sebenarnya Singleton corak?
static Singleton& instance() { static Singleton s; return s; }
Jawapan:
Untuk memahami Singletonness pelaksanaan Meyers, adalah penting untuk mengenali ciri utama: tempoh storan statik.
Dalam C , pembolehubah tempatan yang diisytiharkan dalam fungsi mempunyai tempoh storan statik jika ia diisytiharkan statik. Ini bermakna hanya satu contoh pembolehubah itu wujud untuk keseluruhan program, tidak kira berapa kali fungsi dipanggil.
Dalam pelaksanaan Meyers, pembolehubah Singleton statik mempunyai tempoh storan statik. Oleh itu, hanya satu contoh Singleton boleh dibuat, menguatkuasakan corak Singleton.
Untuk memberikan pemahaman yang lebih jelas, mari kita pecahkan kod di bawah hud:
// Global guard variable static bool __guard = false; // Static storage for the Singleton static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*>(__storage); }
Pelaksanaan ini ialah serupa dengan cadangan asal Meyers tetapi termasuk mekanisme keselamatan benang. Pembolehubah __guard memastikan bahawa Singleton dimulakan sekali sahaja, walaupun jika diakses serentak daripada berbilang urutan.
Perbandingan dengan Pelaksanaan Lain:
Berbanding dengan pelaksanaan Singleton yang lain, Meyers ' versi menawarkan kebaikan berikut dan keburukan:
Kebaikan:
Keburukan:
Kesimpulan:
Singleton yang dimulakan dengan malas Meyers pelaksanaan memanfaatkan tempoh storan statik untuk memastikan bahawa hanya satu contoh Singleton wujud sepanjang program, menjadikannya corak Singleton yang sah. Walaupun pelaksanaan lain mungkin menawarkan kelebihan dari segi prestasi atau pengurusan memori, versi Meyers kekal sebagai reka bentuk Singleton yang boleh dipercayai dan digunakan secara meluas.
Atas ialah kandungan terperinci Adakah Meyers' Lazy Initialized Singleton Pelaksanaan Benar-benar Singleton?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!