C++中的vector其原理实质上是一个不断更新大小的数组,当向其中插入元素的大小大于实际大小时,会将整个数组进行复制,然后挪到内存中一块更大的连续地址空间,这里就产生了问题。
如果在其他地方保存vector中的对象指针,然后vector重新定位了,那原来的指针就会失效,所以,如果有使用vector中元素指针的情况下,最好不要push_back。
第二中解决办法就是利用,reserve()指定capitaty,避免vector的重新地位,注意,这里是reserve(),不是resize(),也不是在构造函数中指定大小。
类似的错误还有很多,总之,不要对STL可变容器中的对象使用指针或引用,否则不知道什么时候就失效了,如果真要有需求,可以一开始就把STL容器中的元素初始化为指针。
C++ STL 保存vector中对象指针出现错误
最新推荐文章于 2024-05-04 22:37:35 发布