2010-11-28 20 views
5

संभव डुप्लिकेट:
C++ singleton vs completely static objectसी ++ सिंगलटन बनाम स्थिर तरीकों

हाय,

कारण है कि मैं स्थिर वर्ग के तरीकों पर एक सिंगलटन को प्राथमिकता देनी चाहिए।

MoneyPrinter::addJob(PrinterJob &job); 
or 
    MoneyPrinter::getInstance().addJob(PrinterJob &job); 

यह शैली की ही बात है? आप क्या उपयोग करते हैं? क्यूं कर?

ps। मुझे पता है कि सिग्लेट डिफ़ॉल्ट रूप से थ्रेडसेफ (पहला प्रारंभिक) नहीं हैं।

+0

जो कहता है कि आपको उन्हें प्राथमिकता देना चाहिए? –

+0

मैं डुप्लिकेट से सहमत हूं सिवाय इसके कि इसका कभी जवाब नहीं दिया गया था। –

+0

मुझे लगता है कि आपके पास सिंगलटन उदाहरण के लिए एक टाइपो है: मनीप्रिंटर :: GetInstance()। AddJob (प्रिंटरजोब &job); – T33C

उत्तर

2

एक सिंगलटन आप पर नियंत्रण जब वर्ग instantiated है देता है और के रूप में DeadMG बताते अगर आप इसे का दृष्टांत करना चाहते हैं। एक स्थैतिक वर्ग कम नियंत्रित होता है और मुख्य कहने से पहले तत्काल होता है।

अनुक्रम जिसमें कक्षाएं तत्काल होती हैं, कभी-कभी महत्वपूर्ण हो सकती है जब सिंगलटन किसी अन्य वर्ग या संसाधन पर निर्भर करता है जो मुख्य कहने से पहले उपलब्ध नहीं है।

जैसा कि आपने बताया है, यदि आप एकाधिक धागे से सिंगलटन को कॉल करते हैं तो आपको यह सुनिश्चित करने की आवश्यकता है कि आपने थ्रेड सुरक्षित सिंगलटन का उपयोग किया हो। स्कॉट मेयर (प्रभावी सी ++ से) उदाहरण के लिए थ्रेड सुरक्षित नहीं है।

+0

आप हमेशा "सिंगलटन" की कार्यान्वयन फ़ाइल के भीतर किसी भी गुप्त, स्थैतिक डेटा सामान का उपयोग कर सकते हैं। वास्तव में, आप एक पूर्ण वर्ग संरचना का उपयोग कर सकते हैं और फिर किसी भी विभिन्न सिंगलेट्स और इस स्थिर चीज़ के बीच का अंतर पूरी तरह से सिंथेटिक है। –

+0

@ नोहा - मैं कहूंगा कि मतभेद भी अर्थपूर्ण हैं और जीओवैक ने एक अच्छा सवाल पूछा है क्योंकि दोनों दृष्टिकोणों पर विचार किया जाना चाहिए और समझा जाना चाहिए। – T33C

3

सिंगलेट्स का सामान्य नियम है, अगर आपको पूछना है, तो इसका उपयोग न करें। यह किसी भी वैश्विक रूप से परिवर्तनीय राज्य के लिए सच है।

+0

इस नियम को प्यार करें। इतना छोटा, अभी तक इतना सच और महत्वपूर्ण। – delnan

+10

-1 क्योंकि यह प्रश्न को बिल्कुल संबोधित नहीं करता है। –

5

कारण है कि मैं स्थिर वर्ग तरीकों

एक सिंगलटन आंतरिक स्थिति हो सकता है पर एक सिंगलटन को प्राथमिकता देनी चाहिए (अपने उदाहरण में कहा, नौकरियों की सूची), अर्थात सिंगलटन वर्ग के सदस्य डेटा।

आप क्या उपयोग करते हैं? क्यूं कर?

यदि कोई राज्य नहीं है, तो एक स्थिर विधि क्योंकि यह सबसे सरल है।

अन्यथा एक सिंगलटन, अधिमानतः स्थैतिक-प्रारंभिक (केवल समय-समय पर या रन-टाइम प्रारंभिक) के बजाय।

+6

आपके पास स्थैतिक विधियों के साथ राज्य हो सकता है, यह केवल स्थिर चर होगा। –

+1

यदि कोई राज्य नहीं है, तो केवल ऐसी विधियों के साथ कक्षा क्यों बनाएं जो कभी भी ऐसी भाषा में नहीं चली जाएगी * क्या सब कुछ नहीं होना चाहिए-एक-कक्षा-बुत * होना चाहिए?बस इसे उचित नामस्थान में, कार्यों का एक गुच्छा बनाओ। – delnan

+0

@ बिली ओनेल - यदि स्थिर चर होने के लिए स्थैतिक चर होते हैं, तो वे सिंगलटन के समान होते हैं और मैं सिंगलटन क्लास – ChrisW

2

यदि आप स्थिर सदस्य फ़ंक्शंस का उपयोग करते हैं तो सिंटैक्स के कारण सिंगलटन-नेस को दोबारा प्रतिक्रिया देना कठिन होगा। एक कारण है।

संबंधित मुद्दे