C++ में Singleton पैटर्न को सही तरीके से कैसे लागू करें (आधुनिक दृष्टिकोण)
नमस्ते, साथियों! मैंने हाल ही में डिज़ाइन पैटर्न सीखना शुरू किया है और Singleton पर ध्यान दिया। मैं विचार समझता हूँ: यह सुनिश्चित करना कि क्लास का केवल एक instance हो, और उसके लिए ग्लोबल access point प्रदान करना। लेकिन C++ में मैं कई अलग-अलग implementations देखता हूँ, और समझ नहीं पाता कि कौन सी सही और thread-safe है।
उदाहरण के लिए, मैंने यह सरल विकल्प लिखा:
```cpp
class Singleton {
public:
static Singleton* getInstance() {
if (!instance) {
instance = new Singleton();
}
return instance;
}
void doSomething() { /* ... */ }
private:
Singleton() {}
static Singleton* instance;
};
Singleton* Singleton::instance = nullptr;
```
लेकिन मुझे कई बातें परेशान करती हैं:
1. यह thread-safe नहीं है: यदि दो threads एक साथ `getInstance()` को call करें, तो दो objects बन सकते हैं।
2. क्या object को स्पष्ट रूप से delete करना आवश्यक है? यदि हाँ, तो कैसे? Destructor में? लेकिन फिर destructor को कौन call करेगा?
3. मैं इंटरनेट पर `std::call_once` के साथ विकल्प देखता हूँ