关注
我看的vector存储的是start\ end \end_of_storage三个指针,分别代表存储空间的开头,结尾和已使用的部分。push_back如下,先判断空间是否足够,足够的话,直接调用allocator的构造函数进行构造。 void
push_back(const value_type& __x)
{
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,__x);
++this->_M_impl._M_finish;
}
追踪_Alloc_traits到下面者一句。 typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
去看下construct函数的行为 // uses placement-new to construct an object of type _Tp at location __p from the arguments __args...
static void std::allocator_traits< _Alloc >::construct (
_Alloc & __a, //一个allocator
_Tp * __p, //要将对象构造再哪个位置,placement new的参数
_Args &&... __args //用于构造的参数
)
回到之前push_back函数中的调用 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,__x);
++this->_M_impl._M_finish;
第一个参数为allocator、第二个为finish指针,其实就是end_of_storage,第三个为push_back传进来的参数。按照construct的行为,会 把对像构造在finish指针的位置,也就是说vector中存的是对象,不是指针
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 国企还是互联网,你怎么选? #
122217次浏览 941人参与
# 找工作,行业重要还是岗位重要? #
8165次浏览 105人参与
# 五一之后,实习真的很难找吗? #
46495次浏览 335人参与
# 盲审过后你想做什么? #
12877次浏览 115人参与
# 领导秒批的请假话术 #
10109次浏览 76人参与
# 小厂实习有必要去吗 #
42303次浏览 260人参与
# 设计人如何选offer #
98506次浏览 690人参与
# 外包能不能当跳板? #
22224次浏览 191人参与
# 五一假期,你打算“躺”还是“卷”? #
32350次浏览 445人参与
# 考研可以缓解求职焦虑吗 #
21371次浏览 252人参与
# 如果校招重来我最想改变的是 #
245245次浏览 2781人参与
# 面试等了一周没回复,还有戏吗 #
115798次浏览 1076人参与
# 大疆的机械笔试比去年难吗 #
69686次浏览 603人参与
# 硬件人,你被哪些公司给挂了 #
46828次浏览 724人参与
# 如果有时光机,你最想去到哪个年纪? #
43392次浏览 770人参与
# 找工作前vs找工作后的心路变化 #
7223次浏览 64人参与
# 秋招前后对offer的期望对比 #
271783次浏览 2075人参与
# 写简历别走弯路 #
714680次浏览 7850人参与
# 应届生薪资多少才合理? #
3134次浏览 24人参与
# 每人推荐一个小而美的高薪公司 #
72874次浏览 1357人参与