delete()
运算符是否也会破坏对象的所有子对象?
或者在删除父对象之前是否需要调用子对象的删除?
class equipment
{
public:
int model_id;
...
}
class player
{
public:
int x, y;
equipment * Equipment;
player(void) { Equipment = new equipment[2];};
~player(void) { delete [] Equipment; }
};
int main (....)
{
player = new Player;
...
...
delete Player;
}
答案 0 :(得分:2)
您需要在主对象的析构函数中删除动态分配的子对象,并且您已通过删除数组Equipment
正确完成此操作
答案 1 :(得分:2)
删除运算符 删除所有“子对象”,但通常情况下,您需要不仅删除“子对象”,还要删除成员指针所指向的内存。 因此,如果您使用了矢量对象,它会自动删除,但在这种情况下,您需要明确删除它,这是您正确执行的
答案 2 :(得分:1)
简单地说,在破坏物体期间:
这意味着您必须手动删除它们(如Equipement
指针),如果您拥有它们。可能存在这样的情况,即您的类最终得到一个它不拥有的指针(例如,此类中需要的其他对象的句柄),因此不应删除。
您可以使用智能指针(例如:std::shared_ptr
,std::unique_ptr
等)以更安全的方式管理内存(特别是,它们会自动删除它们管理的指针,跟随{{3 }})。
答案 3 :(得分:0)
您缺少的一件事是类设备中的析构函数
答案 4 :(得分:0)
您在示例中所做的事情就足够了,
delete[] Equipment;
在播放器的析构函数中,一旦播放器被删除,所有包含的设备都将被删除。
很好!