删除向量的第一个元素并释放C++中的内存
Deleting the first element of a vector and freeing the memory in C++
我一直在试图找到一种删除向量的第一个元素的方法。
vector<int*> vec;
\elements get added to the vector throughout the code
if( GetNumIntsInVec() != 0){
this->vec.erase(this->vec.begin());
}
但是,这是行不通的。
我也需要删除()吗?我的代码会使整个向量消失吗,(我需要以某种方式保存向量吗?我的测试表明,它要么不释放内存,要么删除整个向量。
谢谢!
std::vector<T>
类会照顾自己的内容并销毁包含的对象。销毁指针意味着"什么都不做"。如果你想反对一个元素指向的自动删除,你需要使用一些照顾delete
的东西,例如,一个std::unique_ptr<T>
:
std::vector<std::unique_ptr<int>> vec;
vec.emplace_back(new int(17));
vec.erase(vec.begin());
。或者,您需要明确查看delete
元素。
顺便说一句:擦除std::vector<T>
前面的物体效率相当低下!如果您实际上尝试实现队列之类的东西,则最好使用std::queue<T>
或者,如果您需要随机访问元素std::deque<T>
。虽然std::vector<T>
需要在向前擦除位置后随机排列所有元素,但std::deque<T>
可以在前端和末端有效地擦除。
相关文章:
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- C++双重释放或损坏(out)
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何在向量中释放指针?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- C++:在被本地字符串捕获后释放或销毁 malloc'd char *?
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 如果分配数组引发异常,是否应该释放该数组