关注
我看的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中存的是对象,不是指针
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习简历求拷打 #
6568次浏览 92人参与
# 担心入职之后被发现很菜怎么办 #
264891次浏览 1121人参与
# 秋招被挂春招仍然能投的公司 #
5216次浏览 87人参与
# mt对你说过最有启发的一句话 #
30618次浏览 375人参与
# 什么是优秀的实习经历 #
7013次浏览 193人参与
# 考研失败就一定是坏事吗? #
199172次浏览 1359人参与
# 摸鱼被leader发现了怎么办 #
97297次浏览 622人参与
# 为了找工作你花了哪些钱? #
74589次浏览 359人参与
# 秋招特别不鸣谢 #
13959次浏览 171人参与
# 选实习,你更看重哪方面? #
11973次浏览 204人参与
# 今年秋招你收到了多少封邮件? #
16859次浏览 217人参与
# 你今年的保底offer是哪家 #
154613次浏览 670人参与
# 携程求职进展汇总 #
838219次浏览 5504人参与
# 第一次面试 #
1035585次浏览 13682人参与
# 毕业论文进行时 #
20528次浏览 129人参与
# 工作中遇到的歹人 #
25094次浏览 298人参与
# 找工作有哪些冷知识 #
204817次浏览 2603人参与
# 机械/制造每日一题 #
80039次浏览 1409人参与
# 被上班搭子“传染”了哪些习惯 #
4786次浏览 94人参与
# 工作后,你落下了哪些病根 #
11528次浏览 175人参与
