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,有一个删除.然而,没有内存泄漏.这就是为什么我怀疑在这种情况下会发生什么.
我觉得你在这里有些困惑.如果你有一个类型的对象A,它B里面没有一个对象.它只有两个int,a和b.您的类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)
这两个a和bobj是完全独立的对象.他们彼此无关.你必须要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.