स्मार्ट पॉइंटर (smart pointer) क्या है और इसका उपयोग कब करना चाहिए?
सभी को नमस्कार! मैंने हाल ही में C++ सीखना शुरू किया है और मेमोरी के साथ काम करते समय लगातार समस्याओं का सामना करता हूँ। विशेष रूप से, मुझे मेमोरी लीक और डैंगलिंग पॉइंटर (dangling pointer) डराते हैं। उदाहरण के लिए, मैं अक्सर ऐसा कोड लिखता हूँ:
```cpp
class MyClass {
public:
int* data;
MyClass() {
data = new int(42);
}
~MyClass() {
delete data;
}
};
void example() {
MyClass* obj = new MyClass();
// ... कुछ कोड जो एक्सेप्शन (exception) फेंक सकता है
delete obj;
}
```
समस्या यह है कि अगर `new` और `delete` के बीच कोई एक्सेप्शन (exception) होता है, या मैं `delete` कॉल करना भूल जाता हूँ, तो मेमोरी लीक हो जाती है। और अगर कोई ऑब्जेक्ट को समय से पहले डिलीट कर देता है, और मैं इसका उपयोग जारी रखता हूँ, तो प्रोग्राम क्रैश हो जाता है।
मैंने सुना है कि C++11 में 'स्मार्ट पॉइंटर (smart pointers)' आए हैं, जो इन समस्याओं को हल करने चाहिए। लेकिन मैं बिल्कुल नहीं समझता कि वे कैसे काम करते हैं और उनका उपयोग कब करना चाहिए। `unique_ptr`, `shared_ptr` और `weak_ptr` में क्या अंतर है? क्या अब सामान्य पॉइंटर (raw pointer) का उपयोग बिल्कुल नहीं करना चाहिए? और सही तरीके से कैसे उपयोग करें?