给出以下 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/