2013-05-08 93 views
0
std::vector<Object *> pVector; 

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

所以如果我可以这样认为:如果vector/array存储无指针元素,它会自动调用deconstructor?但如果存储指针,它应该手动删除元素?

回答

2

vector正确销毁储存的物品IN该载体。析构函数将被调用。如果你有一个指针向量,那么这意味着指针自己的析构函数(而不是它指向的内容)。

原始指针的析构函数什么都不做。这是你想要的,如果你有一个非拥有指针指向另一部分程序将销毁的对象。

智能指针的析构函数会执行任何必要的操作来确保对象在正确的时间被释放。对于unique_ptr,那就是现在。对于shared_ptr,只要参考计数达到零即可。

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

0

没有,vector只会删除其持有的内存,这也是内存来容纳指针 - 实际上,这将是一些大小的数组如:

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

当调用析构函数,所有被删除的都是这个数组存储:

delete[] array; 

正如你所看到的,这不会释放那些指针指向的内容。这就是为什么你应该使用vectorunique_ptrshared_ptr而不是原始指针。

0

当std :: vector被销毁时,它调用Object *析构函数而不是Object,所以只有指向内存的指针被销毁。

您应该使用智能指针(std::shared_ptr<Object> or std::unique_ptr<Object>),或者boost::ptr_vector<Object>这将为您管理内存。