Đây không phải là một sự đảm bảo từ tiêu chuẩn, nhưng như một điểm dữ liệu khác, v.push_back(v[0])
an toàn cho libc ++ của LLVM .
Cácstd::vector::push_back
cuộc gọi của libc ++__push_back_slow_path
khi cần phân bổ lại bộ nhớ:
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
. Một poster khác ghi nhận một lỗi trong đó , đó là nó không xử lý đúng trường hợp bạn mô tả. Không ai khác, theo như tôi có thể nói, lập luận rằng đây không phải là một lỗi. Không nói đó là bằng chứng kết luận, chỉ là một quan sát.