【 在 dingdongbell 的大作中提到: 】
: 比如queue中的,push一个元素,会拷贝吗?还是只是放进queue中?这些具体在哪里能找到呢?
llvm版本的源码
template <class _Tp, class _Allocator>
void
deque<_Tp, _Allocator>::push_back(const value_type& __v)
{
allocator_type& __a = __base::__alloc();
if (__back_spare() == 0) //没有多余的空间了
__add_back_capacity();
// __back_spare() >= 1
__alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), __v); // placement new,直接调用T的copy ctor ,在end位置构造
++__base::size();
}
会调用构造函数创建新的对象, 左值 ::new ((void *)end) T(value); 右值就会::new ((void *)end) T(std::move(value)), 调用T(T&&);
--
FROM 119.131.168.*