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

标签 c++ vector heap-memory move

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

相关文章:

C++11 没有匹配函数来调用‘std::vector

c++ - emplace_back 在 vector 中而不是在列表中调用赋值运算符

c++ - C++中的堆栈和堆内存

c++ - 为什么数组分配后的堆这么大

c++ - 被 Unicode、Boost、C++、codecvts 难倒

c++ - 错误:在 '['之前应有预期的unqualified-id,并且在此范围内未声明ERROR: 'users'

c++ - 函数返回另一个函数的返回值

c - Linux 堆结构和 malloc() 和 free() 的行为

C++ std::vector 作为 std::function 的参数

c++ - Qt中除了单选按钮之外是否有类似gui元素的开关