gpt4 book ai didi

c++ - 我可以在超出范围后保留 vector 数据吗

转载 作者:太空宇宙 更新时间:2023-11-04 14:59:20 25 4
gpt4 key购买 nike

我来自 C 背景。我曾经分配内存/数组,例如,将其发送到其他地方,指针留在那里,即使在分配它的范围被销毁之后也是如此。

现在,如果我对 vector 做同样的事情:初始化,通过引用传递它,然后将该引用保存在某处。在实际创建 vector 的初始方法超出范围后,它会被销毁吗?或者因为指向它的指针仍然被保存,所以它会被保留。

最佳答案

std::vector当它被销毁时释放它持有的内存。持有一个被销毁的对象的引用是非常糟糕的。访问它是 UB。一般规则:不要存储引用,仅在可以确定对象在整个范围内存在的地方使用它们,例如作为函数的参数。

如果您想保留数据的拷贝,只需复制 std::vector .无需引用。

如果您希望能够从不同的位置访问数据,并且只要至少有一个位置仍然有指向它的引用/指针,就让它一直存在,不要使用 std::vector , 使用 std::shared_ptr .

如果你想结合std::vector的好处有了共享内存的好处,直到最后一个地方放开它,将它们结合起来:std::shared_ptr<std::vector<...>> .

如果你想要 std::vector在一个地方住一段时间,然后在另一个地方住,但不再住在一开始,使用移动语义:

std::vector<int> foo = {1, 2, 3};
std::vector<int> bar = std::move(foo); // bar now holds the data that foo held, foo is empty, no copy was performed

关于c++ - 我可以在超出范围后保留 vector 数据吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59071549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com