如果我有一个带有指向另一个类的指针数组的类 Vehicle :
class List {
public:
//stuff goes here
private:
Vehicle ** vehicles;
}
如果我现在编写类List
的析构函数,我是否手动迭代数组(我知道数组中有多少项)和delete
每个指向车辆的指针,或者C ++会自动调用数组中所有Vehicle的析构函数吗?
(就像在类中有私有字符串/ ...或者它是车辆指针的STL容器一样)
编辑:
我忘记了delete [] vehicles
,但如果我这样做,它还会删除数组中所有车辆使用的内存,还是只删除指针使用的内存?
答案 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
每一个。