c++ - "Right"解除分配 std::vector 对象的方法

标签 c++ stl vector memory-management

第一个解决方案是:

std::vector<int> *vec = new std::vector<int>;
assert(vec != NULL);
// ...
delete vec;

alternative是:

std::vector<int> v;
//...
vec.clear();
vec.swap(std::vector<int>(vec));

第二个解决方案有点小技巧——“正确”的做法是什么?

更新:

我知道析构函数一旦离开堆栈就会被调用,我对其他方法很好奇。

最佳答案

解除分配 vector 的最简单和最可靠的方法是在堆栈上声明它并且什么也不做。

void Foo() {
  std::vector<int> v;
  ...
}

C++ 保证 v 的析构函数将在方法执行时调用。 std::vector 的析构函数将确保释放它分配的任何内存。只要T vector<T> 的类型具有适当的 C++ 释放语义一切都会好起来的。

关于c++ - "Right"解除分配 std::vector 对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054567/

相关文章:

c++ - std::unordered map with custom key 在 ~ 31,000 个元素处失败

c++ - 来自 Vector 的 Direct3D 旋转矩阵,反之亦然

java - 如何将 Vector<Integer> 转换为 int[]?

c++ - 为什么 GoF 建议在 C++ 模板方法模式实现中使用 protected (而不是私有(private))虚拟方法?

c++ - 防止将左值引用绑定(bind)到非常量对象

c++ - Qt 4.7.3 中缺少 Qtcreator.exe

c++ - C++迭代器:实现迭代器类时出错

C++使用find(str,index)计算字符串中char的出现次数

c++ - STL 映射类数据结构,允许基于两个键进行搜索

c++ - Vector.size() 产生意外大的数字