[英]Deleting array of pointers
delete[] a
(其中a
是动态分配的指针数组)是否对数组中的每个指针执行delete
?
我想,它为具有用户定义类的数组执行析构函数,但是指针发生了什么?
不, delete []
用于删除数组。 如果需要删除数组元素,则需要对每个元素调用delete
。
不。原始指针不包含有关如何(或是否)释放目标的信息,因此销毁一个永远不会删除目标。
这就是为什么您永远不应该使用它们来管理动态资源的原因——您必须自己完成所有工作,这很容易出错。 相反,您应该使用RAII ,用容器、智能指针和其他管理资源并在销毁时自动释放它们的类替换指针。 用std::vector
(或std::vector<std::unique_ptr>
替换你的动态数组,如果你真的需要单独分配每个对象),一切都将自动解除分配。
不,如果a
是动态分配的原始指针数组,则delete[] a;
只是删除存储占领了原始指针数组,但它并没有要求指着对象的析构函数。
所以,如果这些原始指针拥有指针,你就有泄漏:)
使用带有智能指针的STL 容器类,例如std::vector<std::unique_ptr<X>>
,以获得更现代和更简单的方法:通过这种方式,您可以获得异常安全性和两个数组的自动销毁指针和指向的对象。
delete[]
将调用数组每个元素的析构函数。 由于指针是一种基本类型,它实际上没有析构函数,因此它什么也不做。
这正是使用智能指针的原因: delete[]
将调用每个元素的析构函数,智能指针的析构函数将调用托管指针上的delete
。
所以: 了解智能指针并停止手动管理内存。 它更容易,更不容易出错,而且级别更低。
delete[] 只会删除数组中的元素,不会删除数组元素指向的内存。 如果要删除数组元素指向的内存
不, delete[]
只释放由new[]
创建的数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.