删除向量中携带的对象?

时间:2011-12-17 18:45:24

标签: c++ memory-management vector

在C ++应用程序中,我在一个类的各个点创建一个特定类的User对象在每个实例化之后使用operator new和right将它们放在一个向量中,该向量是第一个类的属性(即{{1} })。

  1. 在程序运行时,我可能需要删除类Vehicle的对象。我应该肯定使用运营商删除吗?如果是这样,如何对矢量做?是否有任何预定义的矢量功能来完成相同的工作?当我删除它们时,Vehicle类的属性会发生什么,在这种情况下是指向其他对象的指针?它们也被删除了吗?

  2. 如果在程序结束之前无需删除它们,它们是由析构函数删除还是“手动”删除?

2 个答案:

答案 0 :(得分:2)

这是C ++方式:

#include <memory>
#include <vector>

#include "vehicle.hpp"
typedef std::vector<std::unique_ptr<Vehicle>> vehicle_container;

#include "derivedvehicles.hpp"

int main()
{
    vehicle_container v;
    //...
    v.emplace_back(new Car);
    v.emplace_back(new Bike);
    //...
 } // baam, everything is cleaned up

答案 1 :(得分:0)

这是一个更好的方法(恕我直言):

#include <boost/ptr_container/ptr_vector.hpp>

#include "vehicle.hpp"
typedef boost::ptr_vector<Vehicle> vehicle_container;

#include "derivedvehicles.hpp"

int main()
{
    vehicle_container v;
    //...
    v.emplace_back(new Car);
    v.emplace_back(new Bike);
    //...

    v[0].go();  // Elements accessed as if they are objects (not pointers)
                // Which makes using in any of the standard 
                // algorithms trivial.

} // ta-da, everything is cleaned up