यह मानक से कोई गारंटी नहीं है, लेकिन एक अन्य डेटा बिंदु के रूप में, LLVM के libc ++ केv.push_back(v[0])
लिए सुरक्षित है ।
libc ++ कीstd::vector::push_back
कॉल __push_back_slow_path
तब होती है जब उसे मेमोरी को पुनः लोड करने की आवश्यकता होती है:
void __push_back_slow_path(_Up& __x) {
allocator_type& __a = this->__alloc();
__split_buffer<value_type, allocator_type&> __v(__recommend(size() + 1),
size(),
__a);
// Note that we construct a copy of __x before deallocating
// the existing storage or moving existing elements.
__alloc_traits::construct(__a,
_VSTD::__to_raw_pointer(__v.__end_),
_VSTD::forward<_Up>(__x));
__v.__end_++;
// Moving existing elements happens here:
__swap_out_circular_buffer(__v);
// When __v goes out of scope, __x will be invalid.
}
push_back
दिया । एक अन्य पोस्टर में एक बग का उल्लेख किया गया था , कि यह आपके द्वारा वर्णित मामले को ठीक से संभाल नहीं पाया। कोई और नहीं, जहां तक मैं बता सकता हूं, तर्क दिया कि यह एक बग नहीं था। यह कहते हुए कि यह निर्णायक सबूत नहीं है, सिर्फ एक अवलोकन है।