带有指针数组C ++的类的析构函数

时间:2011-01-20 15:02:02

标签: c++ arrays destructor delete-operator

如果我有一个带有指向另一个类的指针数组的类 Vehicle

class List {
    public:
        //stuff goes here
    private:
        Vehicle ** vehicles;
}

如果我现在编写类List的析构函数,我是否手动迭代数组(我知道数组中有多少项)和delete每个指向车辆的指针,或者C ++会自动调用数组中所有Vehicle的析构函数吗?

(就像在类中有私有字符串/ ...或者它是车辆指针的STL容器一样)

编辑: 我忘记了delete [] vehicles,但如果我这样做,它还会删除数组中所有车辆使用的内存,还是只删除指针使用的内存?

4 个答案:

答案 0 :(得分:7)

您必须删除阵列中的所有条目并删除该阵列。 C ++(STL)中有一些方法可以避免这种情况:使用向量,因此您不必删除数组。每辆车使用scoped_ptr / shared_ptr,因此您不必删除车辆。

答案 1 :(得分:3)

如果List拥有Vehicle对象(在构造函数中创建它们),则需要删除每一个对象,然后删除指针数组。

答案 2 :(得分:2)

  

如果我有一个带有指向另一个类的指针数组的类车辆:

  Vehicle ** vehicles;

vehicles不是指针数组,而是指向Vehicle类型指针的指针。 指针数组的定义类似Vehicle* vehicles[N]

  

我手动迭代数组(我知道数组中有多少项)并删除指向车辆的每个指针

是的!您不希望您的代码泄漏内存吗?

我建议使用Boost库中的Boost::scoped_ptr。此外,如果您的编译器支持C ++ 0x,您也可以使用std::unique_ptr

答案 3 :(得分:0)

您必须手动迭代车辆并delete每一个。