use*_*903 5 c++ heap move vector
给出以下C++代码:
std::vector<int> myVec;
int* num = new int(1);
myVec.emplace_back(std::move(*num));
Run Code Online (Sandbox Code Playgroud)
如果将具有动态存储持续时间的变量移动到容器(例如向量)中,num如果myVec被销毁(超出范围),仍然需要手动删除吗?如果我用push_back而不是,有什么区别emplace_back吗?
*num您正在复制存储在向量中的值。
这与这样做没有太大区别:
int* num = new int(1);
int cpy = *num;
Run Code Online (Sandbox Code Playgroud)
因此,是的,您必须删除它。
在代码中以某种方式处理指针时,向量不会神奇地处理对象的生命周期。
unique_ptr如果你想控制对象的生命周期,你可以使用s :
myVec.emplace_back(std::make_unique<int>(1));
Run Code Online (Sandbox Code Playgroud)
无论如何,这需要您将向量的类型从 更改std::vector<int>为std::vector<std::unique_ptr<int>>。
否则,您可以这样做:
std::vector<int> myVec;
auto num = std::make_unique<int>(1);
myVec.emplace_back(*num);
Run Code Online (Sandbox Code Playgroud)
一旦num超出其范围,分配的内存将被释放。
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |