Sunting: Dari pertanyaan lain saya memberikan jawaban yang memiliki tautan ke banyak pertanyaan / jawaban tentang lajang: Info lebih lanjut tentang lajang di sini:
Jadi saya telah membaca thread Singletons: desain yang bagus atau tongkat penyangga?
Dan argumennya masih mengamuk.
Saya melihat Singletons sebagai Pola Desain (baik dan buruk).
Masalah dengan Singleton bukanlah Pola melainkan pengguna (maaf semuanya). Semua orang dan ayah mereka berpikir mereka bisa menerapkannya dengan benar (dan dari banyak wawancara yang saya lakukan, kebanyakan orang tidak bisa). Juga karena semua orang berpikir mereka dapat mengimplementasikan Singleton yang benar mereka menyalahgunakan Pola dan menggunakannya dalam situasi yang tidak tepat (mengganti variabel global dengan Singletons!).
Jadi pertanyaan utama yang perlu dijawab adalah:
- Kapan sebaiknya Anda menggunakan Singleton
- Bagaimana Anda menerapkan Singleton dengan benar
Harapan saya untuk artikel ini adalah bahwa kita dapat mengumpulkan bersama di satu tempat (daripada harus mencari google dan mencari beberapa situs) sumber otoritatif kapan (dan kemudian bagaimana) menggunakan Singleton dengan benar. Yang juga sesuai adalah daftar Anti-Penggunaan dan implementasi umum yang buruk yang menjelaskan mengapa mereka gagal bekerja dan untuk implementasi yang baik, kelemahan mereka.
Jadi
siapkan bola: Saya akan mengangkat tangan dan mengatakan inilah yang saya gunakan tetapi mungkin ada masalah.
Saya suka "Scott Myers" menangani subjek dalam buku-bukunya "Effective C ++"
Situasi Baik untuk menggunakan Lajang (tidak banyak):
- Kerangka kerja logging
- Kolam daur ulang benang
/*
* C++ Singleton
* Limitation: Single Threaded Design
* See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
* For problems associated with locking in multi threaded applications
*
* Limitation:
* If you use this Singleton (A) within a destructor of another Singleton (B)
* This Singleton (A) must be fully constructed before the constructor of (B)
* is called.
*/
class MySingleton
{
private:
// Private Constructor
MySingleton();
// Stop the compiler generating methods of copy the object
MySingleton(MySingleton const& copy); // Not Implemented
MySingleton& operator=(MySingleton const& copy); // Not Implemented
public:
static MySingleton& getInstance()
{
// The only instance
// Guaranteed to be lazy initialized
// Guaranteed that it will be destroyed correctly
static MySingleton instance;
return instance;
}
};
BAIK. Mari kita mendapatkan beberapa kritik dan implementasi lainnya bersama-sama.
:-)