首页 > 试题广场 >

class A; class B; int main() {

[单选题]
class A;
class B;
int main() {
	A a;  
	B b;  
	return 0;
}
在 main 函数中,变量 a 和 b 的构造函数和析构函数的调用顺序是()
  • b构造 - a构造 - a析构 - b析构
  • a构造 - a析构 - b构造 - b析构
  • b构造 - a构造 - b析构 - a析构
  • a构造 - b构造 - b析构 - a析构
答案 D 
按变量声明顺序构造对象,然后入栈
按相反顺序出栈,析构对象。
编辑于 2021-11-17 11:28:40 回复(3)
在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反,即先构造的后析构,后构造的先析构。它相当于一个栈,先进后出。

发表于 2017-03-14 21:56:24 回复(0)
调用函数的时候用栈来记录局部的变量和对象。按照变量声明的顺序入栈,如果是对象就按顺序调用构造函数,函数调用结束后,后进栈的先弹出,对于对象就是后声明的对象先调用析构函数
发表于 2017-05-30 15:38:03 回复(0)
【正确答案】D
【解析】创建对象时会调用构造函数对对象进行初始化,对象销毁时会调用析构函数释放一些资源。
这里 a 对象和 b 对象都是局部变量,在栈中,所以 a 对象先创建先执行 a 的构造函数,然后 b 对象创建执行 b 的构造函数。
当main 函数执行完以后,b 对象先出栈,所以先调用 b 的析构函数,然后 a 对象出栈,调用 a 的析构函数。

构造函数和析构函数知识点讲解】
更多C++基础专业知识讲解,点击链接即可查看
编辑于 2021-12-23 13:39:21 回复(0)
先构造,再析构;
构造顺序,析构反序。
发表于 2022-03-07 15:23:46 回复(0)
调用函数的时候用栈来记录局部的变量和对象。按照变量声明的顺序入栈,如果是对象就按顺序调用构造函数,函数调用结束后,后进栈的先弹出,对于对象就是后声明的对象先调用析构函数
发表于 2021-12-25 18:05:50 回复(0)
构造函数的调用顺序与析构函数的调用顺序相反。
发表于 2015-09-22 14:25:06 回复(0)
D
用栈实现的,先进后出
发表于 2015-01-28 14:42:09 回复(0)
先构造的后析构
发表于 2020-08-18 20:22:31 回复(0)
c
发表于 2019-04-28 14:52:23 回复(0)
调用函数存放在栈区,构造函数进栈正序调用,析构函数出栈则逆序。
发表于 2019-03-10 23:35:56 回复(0)

先进后出


发表于 2018-08-17 10:37:00 回复(0)
入栈 出栈 
发表于 2016-08-05 16:45:14 回复(0)
D
发表于 2015-07-26 23:59:54 回复(0)
1.先调用A的构造函数
2.调用B的构造函数
3.调用B的析构函数
4. 效用A的析构函数
发表于 2015-05-01 15:45:58 回复(0)