C++ 类中构造和析构的调用顺序

发布时间:2024年01月03日

在声明类对象的时候,用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数一析构函数。

析构函数完成清理工作,因此实际上很有用。例如,如果构造函数使用 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;
}

执行结果:

文章来源:https://blog.csdn.net/wendyWJGU/article/details/135350720
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。