繁体   English   中英

删除c向量的int向量数组

[英]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[]内存。
  • 您可以将此义务传递给智能指针,即实现所有权策略的对象,该策略将负责正确的解除分配。
  • 您应该尽可能避免动态内存分配,并且更喜欢RAII等方案进行内存管理。

以供参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM