Destructor of class with pointer array C++

蓝咒 提交于 2019-12-22 08:26:07

问题


If I have a class with an array of pointers to another class Vehicle :

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

If I now write the destructor of the class List, do I manually iterate over the array (I know how many items are in the array) and delete every pointer to a vehicle, or will C++ automatically call the destructors of all the Vehicles in the array?

(Like it does if there's a private string/... in the class or if it would be a STL container of Vehicle pointers)

EDIT: I forgot about delete [] vehicles, but if I would do that, would it also delete the memory used by all the vehicles in the array, or would it just delete the memory used by the pointers?


回答1:


You have to delete all the entries in the array AND delete the array. There are methods in C++ (STL) to avoid this: use a vector, so you don't have to delete the array. Use scoped_ptr/shared_ptr per Vehicle, so you don't have to delete the vehicles.




回答2:


If the List owns Vehicle objects (creates them in the constructor) you need to delete every single one and then delete the array of pointers itself.




回答3:


If i have a class with an array of pointers to another class Vehicle :

Vehicle ** vehicles;

vehicles is not an array of pointers rather its a pointer to pointer to a Vehicle type. An array of pointers would be defined something like Vehicle* vehicles[N].

do i manually iterate over the array (i know how many items are in the array) and delete every pointer to a vehicle

Yes! You dont want your code to leak memory do you?

I would recommend using Boost::scoped_ptr from the Boost library. Moreover if you compiler supports C++0x you can also use std::unique_ptr




回答4:


You have to manually iterate over vehicles and delete each and every of them.



来源:https://stackoverflow.com/questions/4748669/destructor-of-class-with-pointer-array-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!