如何从vector中删除特定的unique_ptr并改变vector的大小



如何访问和打印unique_ptr的值,如何删除第三个值,从而减少容器的值,而不会造成分割错误

#include <memory>
#include <vector>
#include <iostream>
int main()
{
std::vector<std::unique_ptr<int>> vec;
for (int i = 0; i < 5; i++) {
int x(i);
std::unique_ptr<int> ptr2x(&x);
vec.push_back(std::move(ptr2x)); 
}

for (int i = 0; i != vec.size(); i++) {
std::cout << vec.at(i).get() << std::endl;
/* How to print the data stored in the unique_ptr */
if (i == 2) {
/* I want to remove the 3rd element from the vec
simultaneously, vec.size() should reduce to 4.
*/
}
}

return 0;
}

下面是我得到的输出。

此外,为什么所有5个元素的地址都相同。

0x7fff6641258c
0x7fff6641258c
0x7fff6641258c
0x7fff6641258c
0x7fff6641258c
munmap_chunk(): invalid pointer

这个问题的解决方法可以在这里找到。

每次循环迭代,您都会得到一个全新的变量x。每次迭代它都会超出范围,它的生命周期也会结束。每个指向x的指针都是无效的。

更不用说你试图接管所有权x,但x不是你可以拥有的东西。您必须创建一个全新的值,并将该值复制到它。

简单的解决方案是跳过变量x,直接创建i的副本:

vec.emplace_back(new int(i));

相关内容

  • 没有找到相关文章

最新更新