संपादित करें: एक अन्य प्रश्न से मैंने एक उत्तर प्रदान किया जिसमें बहुत सारे प्रश्नों के लिंक / उत्तर दिए गए हैं: एकल गीतों के बारे में अधिक जानकारी:
इसलिए मैंने थ्रेड सिंगलेट्स पढ़ा है : अच्छा डिज़ाइन या बैसाखी?
और तर्क अभी भी गुस्से में है।
मैं सिंगलेट्स को एक डिज़ाइन पैटर्न (अच्छे और बुरे) के रूप में देखता हूं।
सिंगलटन के साथ समस्या पैटर्न नहीं है, बल्कि उपयोगकर्ताओं (हर किसी को खेद है) है। हर कोई और उनके पिता सोचते हैं कि वे एक को सही तरीके से लागू कर सकते हैं (और मेरे द्वारा किए गए कई साक्षात्कारों से, अधिकांश लोग नहीं कर सकते हैं)। यह भी क्योंकि हर कोई सोचता है कि वे एक सही सिंगलटन को लागू कर सकते हैं जो वे पैटर्न का दुरुपयोग करते हैं और इसे उन स्थितियों में उपयोग करते हैं जो उचित नहीं हैं (सिंगलेट्स के साथ वैश्विक चर की जगह!)।
तो मुख्य सवालों के जवाब देने की जरूरत है:
- आपको एक सिंगलटन का उपयोग कब करना चाहिए
- आप एक सिंगलटन को सही तरीके से कैसे लागू करते हैं
इस लेख के लिए मेरी आशा है कि हम एक एकल स्थान पर एक साथ एकत्र कर सकते हैं (गूगल करने और कई साइटों को खोजने के बजाय) एक सिंग्लटन का सही तरीके से उपयोग करने के लिए (और फिर कैसे) का आधिकारिक स्रोत। उपयुक्त एंटी-यूसेज और सामान्य खराब कार्यान्वयन की एक सूची होगी जो यह समझाती है कि वे काम करने में विफल क्यों हैं और अच्छे कार्यान्वयन के लिए उनकी कमजोरियां हैं।
इसलिए गेंद को घुमाएं:
मैं अपना हाथ ऊपर करूंगा और यह कहूंगा कि मैं इसका उपयोग करता हूं लेकिन शायद समस्या है।
मुझे "स्कॉट मायर्स" अपनी किताब "प्रभावी सी ++" में विषय को संभालना पसंद है
सिंगलेट्स (बहुत सारे नहीं) का उपयोग करने के लिए अच्छी स्थिति:
- लॉगिंग चौखटे
- थ्रेड रीसाइक्लिंग पूल
/*
* 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;
}
};
ठीक है। चलो कुछ आलोचना और अन्य कार्यान्वयन एक साथ मिलें।
:-)