35岁退休 2022-08-30 08:45 采纳率: 66.7%
浏览 27
已结题

vector中存的到底是什么

vector中存的到底是什么
今天偶然间看到一篇文章,讲的是noexcept关键字下,vector扩容使用的是move而不是copy,按我对move的理解,假设现在有一个指针A,指向一个对象的实际内存,要将对象交给B,move仅仅是将B指针指向这块内存,之后将A指针置空。如果是这样的话,vecotr在扩容得时候,申请了新的连续的内存,move又不改变对象的内存位置。那他到底是怎么move的啊。还是说vector的连续内存里存的永远都是指针而不是对象本身?
  • 写回答

3条回答 默认 最新

  • Huppert 2022-08-30 09:21
    关注

    vector中存的就是你定义的东西啊,比如 vector 你move就没有啥意义,比如 vector,那么move会有很大的性能提升。
    所以它并没有存储什么特殊东西,主要看你定义的这个对像在move语义下是否高效。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    35岁退休 2022-08-30 10:50

    但是vector扩容会申请新的更大的连续内存,move调用移动构造新生成的对象并不会重新申请内存,而是使用原对象的内存。这不是矛盾了吗

    回复
    Huppert 回复 35岁退休 2022-08-30 11:40

    move调用移动构造新生成的对象并不会重新申请内存,感觉你这里理解有问题,需要新内存啊,我们以移动构造 std:string 为例,还是需要内存存放地址和长度,只是字符串的实际存放地址没有重新开辟。这已经快很多了,在没有移动语义之前,整个string对象都需要重构

    回复
    35岁退休 回复 Huppert 2022-08-30 12:21

    对啊。实际对象存放的地址没有重新开辟,那这个对象又是怎么放到vector新申请的连续内存中的呢。

    回复
    展开全部8条评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 已采纳回答 8月30日
  • 创建了问题 8月30日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部