मेरे पास कक्षा में कुछ कंटेनर हैं, उदाहरण के लिए, वेक्टर या मानचित्र जिसमें साझा_प्टर के ढेर पर रहने वाले ऑब्जेक्ट्स हैं।सी ++ स्मार्ट पॉइंटर कॉन्स शुद्धता
उदाहरण
template <typename T>
class MyExample
{
public:
private:
vector<tr1::shared_ptr<T> > vec;
map<tr1::shared_ptr<T> , int> h;
};
मैं इस वर्ग है कि कभी कभी (shared_ptr<const T>
के माध्यम से) shared_ptrs रिटर्न वस्तुओं const के सार्वजनिक इंटरफेस और है के लिए कभी कभी shared_ptr<T>
जहां मैं फोन करने वाले वस्तुओं उत्परिवर्तित करने के लिए अनुमति देते हैं। मुझे लॉजिकल कॉन्स शुद्धता चाहिए, इसलिए यदि मैं को कॉन्स्ट के रूप में एक विधि चिह्नित करता हूं, तो यह ढेर पर ऑब्जेक्ट्स को नहीं बदल सकता है।
सवाल:
1) मैं tr1::shared_ptr<const T>
और tr1::shared_ptr<T>
की परस्पर से उलझन में हूँ। जब कोई वर्ग में एक shared_ptr<const T>
shared_ptr गुजरता है, मैं एक shared_ptr<T>
या shared_ptr<const T>
वेक्टर के अंदर के रूप में संग्रहीत और नक्शा या मैं नक्शा, वेक्टर प्रकार परिवर्तित करते हैं (जैसे insert_elemeent (shared_ptr<const T>
obj)?
2) यह है निम्नानुसार कक्षाओं को तुरंत चालू करने के लिए बेहतर: MyExample<const int>
? ऐसा लगता है कि अनन्य प्रतिबंधित है, क्योंकि मैं कभी भी shared_ptr<int>
वापस नहीं कर सकता?
tr1::shared_ptr<const T>
T const *
की कार्यक्षमता यह अर्थात् क्या कहते हैं स्थिरांक है नकल उतार रहा है, लेकिन सूचक ही नहीं है:
"एल-वैल्यू।" एक एल-वैल्यू असाइन करने योग्य नहीं है! – curiousguy