对象的销毁过程是指当一个对象不再被程序所使用时,系统将自动回收该对象所占用的内存和其他资源的过程。对象的销毁是对象生命周期的最后一个阶段,其包括以下步骤:
- 调用析构函数
当一个对象即将被销毁时,系统会先调用该对象的析构函数,用来释放该对象所占用的内存和其他资源。
- 执行基类和成员对象的析构函数
如果该对象是继承自其他类或包含有成员对象的复合对象,则系统会依次调用基类和成员对象的析构函数,用来释放这些对象所占用的内存和其他资源。
- 回收内存
全部的析构函数执行完毕后,系统会释放该对象所占用的内存,以便重复利用。
下面给出两个示例,讲解对象销毁过程的具体实现。
示例1:
#include <iostream>
using namespace std;
class Rectangle {
public:
Rectangle(int w, int h) : width(w), height(h) {
cout << "Rectangle constructor is called..." << endl;
}
~Rectangle() {
cout << "Rectangle destructor is called..." << endl;
}
private:
int width;
int height;
};
int main() {
Rectangle rect(10, 20);
return 0;
}
运行上述程序,可以看到输出结果为:
Rectangle constructor is called...
Rectangle destructor is called...
通过输出结果可以看出,在main函数执行结束后,系统会调用rect
对象的析构函数进行销毁操作。
示例2:
#include <iostream>
using namespace std;
class A {
public:
A() {
cout << "A constructor is called..." << endl;
}
virtual ~A() {
cout << "A destructor is called..." << endl;
}
};
class B : public A {
public:
B() {
cout << "B constructor is called..." << endl;
}
~B() {
cout << "B destructor is called..." << endl;
}
};
int main() {
A* p = new B();
delete p;
return 0;
}
运行上述程序,可以看到输出结果为:
A constructor is called...
B constructor is called...
B destructor is called...
A destructor is called...
通过输出结果可以看出,当delete p
执行时,先调用B类的析构函数,再调用A类的析构函数,用来释放B类和A类所占用的内存和其他资源。
综上可知,对象的销毁过程不仅仅是一个简单的内存释放过程,还需要调用各个析构函数进行额外的资源释放工作。