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

前端之家收集整理的这篇文章主要介绍了c – 当矢量需要更多内存并重新记录内存时,指针会发生什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当矢量需要更多的内存时,它将重新分配内存,我不知道在哪里!然后指针变得无效,这有什么好的解释吗?

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

解决方法

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

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

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().细节可能有所不同,取决于您的平台.无论如何,任何先前持有的引用,指针或迭代器都不再有效(可能是因为它们引用了现在释放的内存,尽管在标准中没有指定它们是无效的).

猜你在找的C&C++相关文章