क्योंकि सी ++ सी #/जावा नहीं है।
std::vector<my_obj*> foo;
यह सी #/जावा में के रूप में एक वस्तु, नहीं एक संदर्भ की एक परिभाषा है। एक वस्तु एक प्रकार का एक जीवित उदाहरण है।
new std::vector<my_obj*>()
यह अभिव्यक्ति एक सूचक देता है। यह std::vector<my_obj*>*
देता है, जो समान प्रकार foo
(*
अंत में उन्हें अलग करता है) देता है। foo
एक ऑब्जेक्ट है, std::vector<my_obj*>*
किसी ऑब्जेक्ट के लिए पॉइंटर है।
ऑब्जेक्ट्स (पॉइंटर्स या संदर्भों के बजाए) में विशिष्ट जीवनकाल है। यदि आप किसी ऑब्जेक्ट को new
के साथ पॉइंटर बनाते हैं, तो ऑब्जेक्ट का जीवनकाल तब तक इंगित होगा जब तक कि आप स्पष्ट रूप से delete
पर कॉल न करें। यदि आप किसी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट के सदस्य के रूप में बनाते हैं, तो उस आंतरिक ऑब्जेक्ट का जीवनकाल (अधिक या कम) बाहरी ऑब्जेक्ट के जीवनकाल को दर्पण करेगा। यदि आप स्टैक पर एक ऑब्जेक्ट बनाते हैं (फ़ंक्शन स्कोप पर पैरामीटर या चर), तो यह जीवनकाल उस चर नाम का वर्तमान दायरा है।
स्रोत
2011-12-28 18:59:58
उन्होंने क्या कहा। इसके अलावा, मैं 'foo.push_back (नया my_obj()) की अनुशंसा नहीं कर सकता;' क्योंकि आप वहां स्मृति को कहां मुक्त कर रहे हैं? –