वस्तु पर विचार करें:कॉन्स्ट शुद्धता shared_ptr
class Obj
{
public:
Obj() : val(new int(1)) {}
int& get() {return *val;}
const int& get() const {return *val;}
private:
std::shared_ptr<int> val;
};
जैसी उम्मीद थी, जब वस्तु का निर्माण किया है और प्रतियां वे सब Obj द्वारा उजागर shared_ptr के माध्यम से एक ही मूल्य संशोधित कर सकते हैं बना रहे हैं।
Obj nonconst1;
Obj nonconst2(nonconst1);
nonconst2.get() = 2;
cout << nonconst1.get() << ", " << nonconst2.get() << endl;
यह भी गैर स्थिरांक, जिसमें यह पढ़ने लेकिन मूल्य के लिए लिख नहीं की अनुमति देता है कि सही बात करने के लिए लगता है से एक से एक const Obj
वस्तु कॉपी-निर्माण करने के लिए संभव नहीं है - के रूप में उम्मीद में निम्न कोड परिणाम एक संकलन त्रुटि:
const Obj const1(nonconst1);
const1.get() = 3;
हालांकि यह संभव है स्थिरांक एक है, जो तब मूल्य की अनुमति है संशोधित करने से एक गैर स्थिरांक Obj कॉपी-निर्माण करने के लिए।
Obj nonconst3(const1);
nonconst3.get() = 3;
मेरे लिए यह कॉन्स्ट-सही महसूस नहीं करता है।
क्या इस व्यवहार को रोकने के लिए कोई तरीका है, जबकि अभी भी प्रतिलिपि बनाने वाले को काम करने की इजाजत है? मेरे वास्तविक उपयोग के मामले में, मैं अभी भी ओबीजे के एसडीडी कंटेनरों को संभव बनाना चाहता हूं।
शायद, आपको प्रति-निर्माण संदर्भ लेने वाले प्रति-निर्माता को परिभाषित करना चाहिए ताकि 'const' ऑब्जेक्ट्स की प्रतिलिपि बनाने से बचें? – Nawaz
@ नवाज, यह काम करता है (मुझे एहसास नहीं हुआ था कि एक कॉपी कन्स्ट्रक्टर में गैर-कॉन्स रेफरी का उपयोग करना संभव था)। दुर्भाग्य से मैं अन्य कॉन्स्ट ओब्जे के निर्माण की प्रतिलिपि बनाने में सक्षम होने के लिए कॉन्स ओब्ज को भी पसंद करूंगा लेकिन 'ओबीजे (कॉन्स ओब्जे एंड ओ) कॉन्स' का प्रयास – tangobravo