C ++删除对象

时间:2013-06-24 08:05:25

标签: c++ delete-operator

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;
}

5 个答案:

答案 0 :(得分:2)

您需要在主对象的析构函数中删除动态分配的子对象,并且您已通过删除数组Equipment正确完成此操作

答案 1 :(得分:2)

删除运算符 删除所有“子对象”,但通常情况下,您需要不仅删除“子对象”,还要删除成员指针所指向的内存。 因此,如果您使用了矢量对象,它会自动删除,但在这种情况下,您需要明确删除它,这是您正确执行的

答案 2 :(得分:1)

简单地说,在破坏物体期间:

  • 会员对象本身被销毁
  • 成员指针指向的对象不是

这意味着您必须手动删除它们(如Equipement指针),如果您拥有它们。可能存在这样的情况,即您的类最终得到一个它不拥有的指针(例如,此类中需要的其他对象的句柄),因此不应删除。

您可以使用智能指针(例如:std::shared_ptrstd::unique_ptr等)以更安全的方式管理内存(特别是,它们会自动删除它们管理的指针,跟随{{3 }})。

答案 3 :(得分:0)

您缺少的一件事是类设备中的析构函数

答案 4 :(得分:0)

您在示例中所做的事情就足够了,

delete[] Equipment;

在播放器的析构函数中,一旦播放器被删除,所有包含的设备都将被删除。

很好!