删除主类的对象指针是否也删除了嵌套类指针?

use*_*833 3 c++ class subclass

我在类,嵌套类中有一个类

class A {
 public:
 int a;
 int b;
  class B {
    int c;
    int d;
  }
}
Run Code Online (Sandbox Code Playgroud)

在这个过程中,我在堆中分配了B类的对象指针.

   B *bobj = new B();
   A *a;
   auto_ptr<A> A1(new A());
   a = A1.release();
Run Code Online (Sandbox Code Playgroud)

删除a,删除bobj也是?

delete a;
Run Code Online (Sandbox Code Playgroud)

还是我们应该明确删除子类指针?

这是在我不写的代码中,我把日志放在所有的alloc和deallocs上,我看到B *bobj = new B(),为此没有删除,对于A的对象ptr,有一个删除.然而,没有内存泄漏.这就是为什么我怀疑在这种情况下会发生什么.

Jos*_*eld 9

我觉得你在这里有些困惑.如果你有一个类型的对象A,它B里面没有一个对象.它只有两个int,ab.您的类B只是在内部声明为嵌套类A- 类似于在命名空间中声明它.它必须A::B从课外引用(并且必须public这样做).

在您给出的示例代码中B *bobj = new B(); A *a;,您甚至没有创建A对象.我认为你的意思是这个(假设你做的B public):

A::B *bobj = new A::B();
A *a = new A();
Run Code Online (Sandbox Code Playgroud)

这两个abobj是完全独立的对象.他们彼此无关.你必须要delete两个.

如果相反你做了这个:

class B {
  int c;
  int d;
};

class A {
  int a;
  B b;
};
Run Code Online (Sandbox Code Playgroud)

现在,类类型的对象A有一个名为bwhich 的成员B.该b成员是任何类型对象的一部分A.所以,如果你这样做A* a = new A();,你会得到一个A带有B对象的对象.你必须这样做delete a;.

黄金法则:只有delete你所拥有的new.

  • @juanchopanza刚才提到了! (3认同)