std::vector<Object *> pVector;
当超出范围时,指针的数组/向量是否可以自动删除每个指针元素?或必须手动删除每个对象?
所以如果我能想到:如果向量/数组存储无指针元素,它会自动调用解构函数吗?但是如果存储了指针,它应该手动删除元素吗?
答案 0 :(得分:2)
vector
正确销毁存储 IN 向量的对象。析构函数将被调用。如果你有一个指针向量,那么这意味着指针自己的析构函数(而不是它指向的那个)。
原始指针的析构函数不执行任何操作。如果你有一个指向程序另一部分会破坏的对象的非拥有指针,那么这就是你想要的。
智能指针的析构函数可以执行任何必要的操作,以确保在正确的时间释放对象。对于unique_ptr
,现在就是这样。对于shared_ptr
,每当引用计数达到零时就是这样。
使用正确类型的指针和信任向量来触发元素被删除时与该指针相关联的行为。
答案 1 :(得分:0)
不,vector
只会删除它所拥有的内存,即保存指针的内存 - 实际上,它将是一个大小如下的数组:
Object **array = new Object*[size];
当调用析构函数时,所有被删除的都是这个数组存储:
delete[] array;
正如你所看到的,这不会释放那些指针指向的东西。这就是为什么你应该使用vector
unique_ptr
或shared_ptr
而不是原始指针。
答案 2 :(得分:0)
当std :: vector被销毁时,它会调用Object *
析构函数而不是Object
,因此只会破坏指向内存的指针。
您应该使用智能指针(std::shared_ptr<Object> or std::unique_ptr<Object>)
,boost::ptr_vector<Object>
,它将为您管理内存。