在声明类对象的时候,用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数一析构函数。
析构函数完成清理工作,因此实际上很有用。例如,如果构造函数使用 new 来分配内存,则构函数将使用 delete来释放这些内存Stk 的构造函数没有使用 new,因此析构函数实际上没有需要完成的任务。
在这种情况下,只需让编译器生成一个什么要不做的隐式析构函数即可,Stock 类第一版正是这样做的。然而,了解如何声明和定义析构函数是绝对必要
的,和构造函数一样,析构函数的名称也很特殊在类名前加上~。和构造函数一样,析构函数也可以没有返回值和声明类型。与构造函数不同的是,析构函数没有参数。
构造函数和析构函数在有继承的情况下,调用的顺序是不同的:
构造: 先父类后子类
析构: 先子类后父类
示例源码:
// Len2024_0103_02.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
class Parent
{
private:
int childNum;
public:
Parent() { printf("Constructor Parent\n"); }
~Parent() { printf("Destructor Parent\n"); }
Parent(int num)
{
childNum = num;
printf("Constructor Parent hae param\n");
}
};
class Child : public Parent
{
public:
Child() { printf("Constructor Child\n"); }
~Child() { printf("Destructor Child\n"); }
};
void fun1()
{
printf("enter fun1\n");
Child c1;
printf("out fun1\n");
}
int main()
{
fun1();
printf("\n");
Child child;
}
执行结果: