//假设我有如下一个类
Class A{
public:
B* b;  // B为一个类
}// 在函数中有如下定义
A* a = new A;
a->b = new B;//在析构时,要不要手动删除b?if (a->b != NULL)
{
  delete a->b;
  a->b = NULL;
}if (a != NULL)
{
   delete a;
   a = NULL;
}
现在的问题是:我在析构中删除a时, 需不需要再删除b?即删除a对象时,会不会自动把b对像申请的空间也delete了?

解决方案 »

  1.   

    A的构造函数里new B,同时A的析构函数里释放B
    A在哪分配的空间 就在哪释放 关析构什么事
      

  2.   

    // 在函数中有如下定义
    A* a = new A;
    a->b = new B;你这样分配空间
    就先delete B,再delete A
      

  3.   

    在内存单元中,对于每一段代码都分配了一段内存单元,其中new,malloc的部分在堆内存部分分配,需要自己手动用delete,free删除,否则会导致内存泄露。所以,A和B 都得手动delete。