को देखते हुए में एक गतिशील आवंटित चर ले जाएँ निम्नलिखित सी ++ कोड है अगर myVec
नष्ट हो गया है (गुंजाइश से बाहर चला जाता है)? क्या emplace_back
के बजाय push_back
का उपयोग करने में कोई अंतर है?एक वेक्टर
उत्तर
आप अपने वेक्टर में *num
में संग्रहीत मूल्य की प्रतिलिपि बना रहे हैं।
यह ऐसा करने से बहुत अलग नहीं है:
int* num = new int(1);
int cpy = *num;
इसलिए हाँ, आपको उसे हटाना होगा।
वेक्टर आपके कोड में किसी भी तरह से पॉइंटर्स से निपटने के दौरान वस्तुओं के जीवनकाल को जादूगर रूप से संभाल नहीं पाते हैं।
आप unique_ptr
s का उपयोग अगर आप अपने वस्तुओं के लिए नियंत्रित जीवन काल करना चाहते हैं कर सकते हैं:
myVec.emplace_back(std::make_unique<int>(1));
वैसे भी, इस std::vector<int>
से std::vector<std::unique_ptr<int>>
लिए वेक्टर के प्रकार बदलने के लिए की आवश्यकता है।
अन्यथा, आप यह कर सकते हैं:
std::vector<int> myVec;
auto num = std::make_unique<int>(1);
myVec.emplace_back(*num);
आवंटित स्मृति के रूप में जल्द num
इसके दायरे से बाहर चला जाता है के रूप में मुक्त हो जाएगा।
int
जो केवल कॉपी किया जायेगा उपयोग कर रहे हैं एक
कदम उत्पन्न नहीं होंगे
।
लेकिन फिर भी जब आप एक वेक्टर आप अभी भी स्मृति को रिहा करने की जरूरत में ढेर पर एक वस्तु का ले जाने मूल्य क्योंकि चलती मूल्य अभी भी एक में वस्तु से चले गए छोड़ देता है वैध राज्य। यह अभी भी मौजूद है और इसका उपयोग किया जा सकता है। चल रहा है इसका प्रभाव यह है कि इसका मूल्य बदल सकता है और इसलिए जब तक आप एक नया पुन: असाइन नहीं करते हैं तब तक इसका मूल्य भरोसा नहीं किया जा सकता है।
अगर आप कदम मूल्य यह अभी भी बनी हुई है के रूप में एक वैध ढेर पर वस्तु तो मैं अभी भी स्वतंत्र रूप से क्या करने के लिए के लिए ले जाया होता है कीको हटाने की जरूरत है के लिए emplace_back()
या push_back()
का उपयोग यह कोई फर्क नहीं पड़ता वेक्टर में तत्व।
तो std::move()
की सुविधा (लेकिन गारंटी नहीं है) चलतीसामग्री (या मूल्य) वस्तु की - नहीं वस्तु ही तो ले जाया वस्तु अभी भी जरूरत से हटा रहा है।
- 1. एक वेक्टर के भीतर एक वेक्टर ढूँढना
- 2. एक वेक्टर
- 3. एक वेक्टर
- 4. एक वेक्टर
- 5. एक वेक्टर
- 6. एक वेक्टर
- 7. एक वेक्टर
- 8. एक वेक्टर
- 9. एक वेक्टर
- 10. एक वेक्टर
- 11. एक वेक्टर
- 12. एक वेक्टर के एक हिस्से को दूसरे वेक्टर
- 13. सी ++ कैसे एक वेक्टर
- 14. एसटीएल एक वेक्टर क्लोनिंग
- 15. कैसे एक वेक्टर
- 16. स्पार्क: इनपुट एक वेक्टर
- 17. एक एसटीएल वेक्टर
- 18. MATLAB - एक वेक्टर
- 19. एक और वेक्टर
- 20. आर एक वेक्टर
- 21. एक प्रारंभिक वेक्टर
- 22. sizeof() एक वेक्टर
- 23. जूलिया: एक खाली वेक्टर
- 24. कैसे एक वेक्टर
- 25. सी ++ क्यूवीटी - एक वेक्टर
- 26. एक वेक्टर तत्व
- 27. सी ++ एक और वेक्टर
- 28. क्लोजर - एक रेफ वेक्टर
- 29. push_back() एक वेक्टर
- 30. एक चरित्र वेक्टर
आप "एक चर चलाना नहीं" हैं। आप एक वेक्टर तत्व जोड़ रहे हैं जिसका मूल्य ढेर पर वस्तु के समान है। –
प्रेरणा स्पष्ट हो सकती है यदि आप 'std :: string' जैसे कुछ उपयोग करते हैं जहां चालक कन्स्ट्रक्टर और कॉपी कन्स्ट्रक्टर वास्तव में –