मैंने हाल ही में अपने कोड में कॉन्स्ट शुद्धता को लागू करने की कोशिश करना शुरू कर दिया है। एक समारोह परिभाषा में, मैं कक्षा LorentzM
की एक निरंतर वस्तु के लिए एक निरंतर सूचक फ़ीड:कॉन्स शुद्धता और shared_ptr, डिजाइन की बात है?
void AnalysisObject::SetOwnedPointer(const int maptotree_In, const LorentzM* const momentum_In){
owned_pp4_original.reset(momentum_In);
maptotree=maptotree_In;
}
जहां owned_pp4_original
shared_ptr<LorentzM> owned_pp4_original;
मैं यह कर रहा है, क्योंकि इस समारोह, SetOwnedPointer, बदलने कभी नहीं करना चाहिए LorentzM* momentum_In
और न ही उस वस्तु को बदलना चाहिए जो यह इंगित करता है, इसलिए लगातार ऑब्जेक्ट के लिए निरंतर सूचक यह है।
हालांकि, एक shared_ptr वस्तु जहां momentum_In को अंक करने के लिए बनाया गया है, और मैं इस shared_ptr उपयोग करने के लिए वस्तु पर बाद में बदलना चाहते हैं :
void ChangeLorentzM(const double px, const double py, const double pz, const double E){
owned_pp4_original->SetPxPyPzE(px,py,pz,E); //THIS CHANGES THE OBJECT
}
तो, एक हाथ पर, होना करने के लिए
owned_pp4_original.reset(momentum_In);
owned_pp4_original
एक shared_ptr<const LorentzM>
होना चाहिए, लेकिन फिर, मैं wouldn: ऐसा करने में सक्षम इसके माध्यम से वस्तु को बदलने में सक्षम नहीं होगा।
इस तस्वीर में क्या गलत है?
बहुत बहुत धन्यवाद।
उत्तर के लिए धन्यवाद। तब मैंने कॉन्स्ट शुद्धता के उस हिस्से को गलत समझा। आप जो कहते हैं वह अधिक समझ में आता है। – elelias