นี้ไม่ได้รับประกันจากมาตรฐาน แต่เป็นจุดข้อมูลอื่นv.push_back(v[0])
มีความปลอดภัยสำหรับlibc LLVM ของ ++
libc ++ 'sstd::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
ผู้โพสต์อีกคนสังเกตเห็นข้อบกพร่องในนั้นซึ่งไม่สามารถจัดการกับกรณีที่คุณอธิบายได้อย่างถูกต้อง เท่าที่ฉันสามารถบอกได้แย้งว่านี่ไม่ใช่ข้อบกพร่อง ไม่ได้บอกว่าเป็นข้อพิสูจน์ที่สรุปได้เป็นเพียงข้อสังเกต