[英]deleting c-style array of int vectors
我宣布:
vector<int> * part = new vector<int>[indmap];
好吧,我知道:“你为什么不宣布一个矢量向量?”。 下次我会这样做,但现在我想了解更多关于我无法解决的向量的问题。
现在我想释放所有资源,我该做什么?
delete[] part;
但在删除数组之前,我该怎么做才能删除所有的矢量对象?
不,你没有。 这里有一个简单的规则(当你不使用智能指针 ) - 使用delete
当您使用new
。
所以,这里只有一个new[]
,你只需要一个delete[]
。
@Joachim Pileborg是对的,但是你会有更多的new
,所以,你需要更多的delete
。
这取决于矢量的内容。 如果它包含原始指针(如int *
),则需要迭代向量并手动删除所有条目。 否则,如果它只包含基本类型或对象(不是它们的指针)或智能指针 ,它将自动处理。
使用delete
,在取消分配之前调用指向对象的析构函数(执行此操作时,使用new
创建对象时)。
类似地,当您使用数组版本delete[]
时,将调用所有已创建对象的析构函数(当您使用new[]
分配了一个对象数组时,请执行此操作)。
std::vector<T>
的析构函数自动调用包含对象的析构函数。
因此,正如Joachim Pileborg在他的回答中指出的那样,你需要手动删除向量的对象,只有当你有指向动态分配对象的原始指针(例如,由new
分配的对象)并且你负责删除(即你拥有它们)。 原始指针没有会破坏指向对象的析构函数,因此在这种情况下,您必须迭代向量以手动删除对象。 否则,可以简单地销毁向量(或者在这种情况下删除数组)。
根据经验:
delete
使用new
分配的内存。 new[]
delete[]
已分配的delete[]
内存。 以供参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.