加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 当矢量需要更多内存并重新记录内存时,指针会发生什么?

发布时间:2020-12-16 03:15:27 所属栏目:百科 来源:网络整理
导读:当矢量需要更多的内存时,它将重新分配内存,我不知道在哪里!然后指针变得无效,这有什么好的解释吗? 我的意思是他们去哪里,我的集装箱怎么样? (不是链表) 解决方法 简短的答案:一切都会好的.不用担心,重新上班. 中等答案:向矢量添加元素或从矢量中删除元
当矢量需要更多的内存时,它将重新分配内存,我不知道在哪里!然后指针变得无效,这有什么好的解释吗?

我的意思是他们去哪里,我的集装箱怎么样? (不是链表)

解决方法

简短的答案:一切都会好的.不用担心,重新上班.

中等答案:向矢量添加元素或从矢量中删除元素使所有迭代器和引用/指针无效(可能除了从后面移除).就那么简单.在这样的操作之后,不要引用任何旧的迭代器并获得新的迭代器.例:

std::vector<int> v = get_vector();

int & a = v[6];
int * b = &v[7];
std::vector<int>::iterator c = v.begin();
std::advance(it,8);

v.resize(100);

现在a,b和c都是无效的:你不能使用a,你不能取消引用b或c.

长回答:矢量跟踪动态记忆.当内存耗尽时,它会在其他地方分配一个新的更大的块,并复制(或移动)所有旧元素(然后释放旧内存,摧毁旧对象).内存分配和释放由分配器(通常是std :: allocator< T>)完成,而分配器通常会调用:: operator new()来获取内存,而内存又通常调用malloc().细节可能有所不同,取决于您的平台.无论如何,任何先前持有的引用,指针或迭代器都不再有效(可能是因为它们引用了现在释放的内存,尽管在标准中没有指定它们是无效的).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读