Avatar ·

C++ में मल्टीथ्रेडिंग के साथ Singleton पैटर्न को सही तरीके से कैसे लागू करें?

सभी को नमस्ते! मैं एक शुरुआती C++ डेवलपर हूँ और Singleton पैटर्न को समझने की कोशिश कर रहा हूँ। मैंने पढ़ा कि यह एक क्रिएशनल पैटर्न है, जो सुनिश्चित करता है कि क्लास का केवल एक instance हो, और उसके लिए एक global access point प्रदान करता है। मैंने लॉगर के लिए एक सरल implementation लिखा: ```cpp class Logger { public: static Logger* getInstance() { if (instance == nullptr) { instance = new Logger(); } return instance; } void log(const std::string& msg) { std::cout << msg << std::endl; } private: Logger() {} static Logger* instance; }; Logger* Logger::instance = nullptr; ``` लेकिन मुझे कुछ बातें परेशान कर रही हैं: 1. मल्टीथ्रेडेड environment में, यदि दो threads एक साथ getInstance() को call करें, तो कई instances बन सकते हैं। 2. ऑब्जेक्ट को delete करने का कोई mechanism नहीं है — इससे memory leak होता है। 3. मैंने अलग-अलग विकल्प देखे: mutex के साथ, std::call_once के साथ, magic statics के साथ। इनमें से कौन सा सही है? 4. मैंने portability से जुड़ी समस्याओं के बारे में सुना है।