C++ 指针数组/向量是否可以自动删除指针? std::vector-pVector;

C++ 指针数组/向量是否可以自动删除指针? std::vector-pVector;,c++,pointers,C++,Pointers,当超出范围时,指针的数组/向量是否可以自动删除每个指针元素?还是必须手动删除每个对象 那么我是否可以这样想:如果向量/数组不存储指针元素,它会自动调用解构器?但是如果存储了指针,它应该手动删除元素。vector会正确地销毁向量中存储的对象。将调用析构函数。如果您有一个指针向量,那么这意味着指针自己的析构函数(而不是它指向的) 原始指针的析构函数不执行任何操作。如果您有一个指向程序另一部分将销毁的对象的非所有者指针,那么这就是您想要的 智能指针的析构函数执行任何必要的操作,以确保在正确的时间释放对

当超出范围时,指针的数组/向量是否可以自动删除每个指针元素?还是必须手动删除每个对象


那么我是否可以这样想:如果向量/数组不存储指针元素,它会自动调用解构器?但是如果存储了指针,它应该手动删除元素。

vector
会正确地销毁向量中存储的对象。将调用析构函数。如果您有一个指针向量,那么这意味着指针自己的析构函数(而不是它指向的)

原始指针的析构函数不执行任何操作。如果您有一个指向程序另一部分将销毁的对象的非所有者指针,那么这就是您想要的

智能指针的析构函数执行任何必要的操作,以确保在正确的时间释放对象。对于
unique\u ptr
,就是现在。对于
shared\u ptr
,只要引用计数达到零,就会出现


使用正确类型的指针和信任向量,在删除元素时触发与该指针关联的行为。

否,
向量将只删除它所持有的内存,即用来持有指针的内存-实际上,它将是一个具有一定大小的数组,例如:

std::vector<Object *> pVector;
调用析构函数时,删除的只是此数组存储:

Object **array = new Object*[size]; 

正如您所看到的,这不会释放这些指针指向的任何内容。这就是为什么您应该使用
唯一ptr
共享ptr
向量
,而不是原始指针。

当std::vector被销毁时,它调用
对象*
析构函数,而不是
对象
,因此只销毁指向内存的指针

您应该使用智能指针
(std::shared\u ptr或std::unique\u ptr)
,也可以使用
boost::ptr\u vector
为您管理内存

delete[] array;