gpt4 book ai didi

c++ - 将动态分配的变量 move 到 vector 中

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:17 24 4
gpt4 key购买 nike

给出以下 C++ 代码:

std::vector<int> myVec;
int* num = new int(1);
myVec.emplace_back(std::move(*num));

如果将具有动态存储持续时间的变量 move 到容器(例如 vector )中,如果 myVec 被销毁(从范围)?如果我使用 push_back 而不是 emplace_back 有什么不同吗?

最佳答案

您正在复制存储在 *num 中的值在你的 vector 中。
这与这样做没有太大区别:

int* num = new int(1);
int cpy = *num;

因此,是的,您必须删除它。
在代码中以某种方式处理指针时, vector 不会神奇地处理对象的生命周期。


您可以使用 unique_ptr如果您想控制对象的生命周期:

myVec.emplace_back(std::make_unique<int>(1));

无论如何,这需要您从 std::vector<int> 更改 vector 的类型至 std::vector<std::unique_ptr<int>> .

否则,您可以这样做:

std::vector<int> myVec;
auto num = std::make_unique<int>(1);
myVec.emplace_back(*num);

分配的内存将在 num 后立即释放超出其范围。

关于c++ - 将动态分配的变量 move 到 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40294343/

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