面试题答案
一键面试- 析构函数调用顺序:
- 当类A对象的生命周期结束时,首先会调用类A自身的析构函数。
- 在类A的析构函数中,如果类A包含类B的对象成员,那么会调用类B的析构函数来释放类B的动态分配资源。
- 接着,类A析构函数中负责释放指向类C对象的指针所指向的资源(如果有)。
- 最后,类A自身的析构函数执行完毕,类A对象被完全销毁。
- 类A析构函数的正确编写:
class B {
public:
~B() {
// 释放B的动态分配资源
}
};
class C {};
class A {
private:
B b;
C* cPtr;
public:
A() {
cPtr = new C();
}
~A() {
// 释放类C对象的资源
delete cPtr;
// 此时b的析构函数会自动调用,释放类B的资源
}
};
在上述代码中,类A的析构函数首先释放了指向类C对象的指针cPtr
所指向的资源,然后类A成员变量b
(类B的对象)的析构函数会自动调用,从而确保类B的动态分配资源也被释放。这样就保证了类A对象生命周期结束时所有资源都被妥善释放。