इस कोड नमूना पर विचार करें:क्या सी ++ में अभी तक निर्मित ऑब्जेक्ट के संदर्भ को बाध्य करना सुरक्षित है?
class Base {
public:
Base(string& _object) : object(_object) {}
private:
string& object;
};
class Derived: public Base {
public:
Derived() : Base(object) {}
private:
string object;
};
जाहिर है पहले Base
का निर्माण किया गया है और इसे अभी तक निर्मित ऑब्जेक्ट का संदर्भ नहीं दिया गया है।
मेमोरी को पूरे Derived
ऑब्जेक्ट के लिए आवंटित किया गया है, इसलिए Derived::object
कानूनी रूप से सुलभ मेमोरी में है, बस इसका कन्स्ट्रक्टर नहीं चला है। Base::Base()
पास ऑब्जेक्ट के किसी भी तरीके को कॉल नहीं करता है, केवल संदर्भ संग्रहीत करता है। यह विजुअल सी ++ 9 में काम करता है। Xzx33
क्या यह सी ++ मानक के अनुसार सुरक्षित है?
अच्छा सवाल। मैंने इसे अपनी परियोजना में से एक में किया है, और यह ठीक काम कर रहा है; किसी भी समस्या को कभी नहीं देखा। लेकिन मैं जानना चाहता हूं कि यह "सुरक्षित" है या नहीं। मानक से उद्धरण के लिए – Nawaz