删除c风格的int向量数组
deleting c-style array of int vectors
我已经声明:
vector<int> * part = new vector<int>[indmap];
好的,我知道了:"为什么不声明一个向量的向量?"下次我会这样做,但现在我想了解更多关于向量的东西,我不能解决。
现在我想释放所有的资源,我该怎么做?
delete[] part;
但是在删除数组之前,我应该做些什么来删除所有的向量对象?
不,你没有。只有一个简单的规则(当你不使用智能指针时)- 在使用new
时使用delete
。
所以,这里只有一个new[]
,你只需要一个delete[]
。
@Joachim Pileborg是对的,但是你会有更多的new
-s,所以,你需要更多的delete
-s。
这取决于vector的内容。如果它包含原始指针(如int *
),则需要迭代向量并手动删除所有条目。否则,如果它只包含基本类型、对象(不是指向对象的指针)或智能指针,则会自动处理。
当您使用delete
时,在取消分配之前调用指向对象的析构函数(当您使用new
创建对象时执行此操作)。
同样,当您使用数组版本delete[]
(当您使用new[]
分配了一个对象数组时,请执行此操作)时,将调用所有创建对象的析构函数。
std::vector<T>
的析构函数自动调用所包含对象的析构函数。
因此,正如Joachim Pileborg在他的回答中指出的那样,您需要手动删除向量的对象,只有当您有指向动态分配对象的原始指针(例如,由new
分配的对象)并且您负责删除它们(即,您拥有它们)时。原始指针没有销毁被指向对象的析构函数,因此在这种情况下,您必须迭代vector以手动删除对象。否则,只需销毁vector对象(在本例中为删除数组)。
根据经验:
- 您需要使用
new
分配的delete
内存。 - 您需要使用
new[]
分配的delete[]
内存。 - 你可以将此义务传递给智能指针,即实现所有权策略的对象,该策略将负责适当的回收。
- 你应该尽可能避免动态内存分配,而选择像RAII这样的内存管理方案。
- http://en.cppreference.com/w/cpp/memory/new/operator_new
- http://en.cppreference.com/w/cpp/memory/new/operator_delete <
- http://en.cppreference.com/w/cpp/container/vector/向量/gh>
- 什么是智能指针,什么时候我应该使用一个?
- https://en.wikipedia.org/wiki/RAII
相关文章:
- 如何在向量数组中插入元素?
- 不同大小的向量数组的大小 cpp
- 很好的语法来获取对向量/数组数据的大小引用?
- 指向 c++ 中的向量数组并将其发送到函数的指针
- 初始化向量数组,其中每个向量的大小为 0
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 如何使用结构体的向量数组?
- C++:向量数组
- 在C++中通过引用传递向量数组
- 向量数组"Cannot access memory at address"
- 构造不同类型的C++向量数组
- 向量数组的均值和众数 - 如何对函数进行较小的改进
- C++:初始化(新)一个不同初始大小的向量数组
- 五个中三个最大参数的平均值,不使用排序算法或向量/数组
- 销毁C++中的向量数组
- 继承向量/数组/列表并更改其大小
- 如何输出属于向量数组的结构字符串
- 如何通过引用传递向量数组
- 在向量数组中获得前五个最大的结果
- 为什么"new vector<int>[5]"不创建向量数组?