析构函数的调用顺序

如果是多个对象,调用构造函数的次序与调用析构函数的次序相反
对于不同作用域和存储类别的对象,构造函数he析构函数的调用顺序
全局对象

  • 构造函数在文件中所有函数执行前调用

  • 当main函数执行完毕或者是调用exit函数时(此时程序会终止),调用析构函数。
    函数中定义的自动局部对象(例如在函数中定义对象)

  • 在建立对象时调用其构造函数,如果函数被多次调用,则在每次建立对象时都要调用构造函数

  • 在函数调用结束、对象释放时先调用析构函数
    函数中定义的静态局部对象

  • 第一次调用次函数建立对象时调用构造函数一次

  • 在调用结束时对象并不会被释放,因此也不会调用析构函数,只在main函数结束或者调用exit函数结束程序时,才调用析构函数
    下面是一个关于析构函数调用顺序的举例
    关于全局对象、静态局部对象、主函数的对象的析构函数调用顺序:

//不同作用域和存储类别的对象构造函数和析构函数的调用顺序
//在写这个代码时遇到了一个问题,几个警告:
/*  我使用的编译器是Visual Studio 2019
出现了一个错误:	E0167	"const char *" 类型的实参与 "char *" 类型的形参不兼容
最后网上搜到了CSDN的以为大神的博客,在项目属性->C/C++->语言中的符合模式项选择否
然后解决掉了
还有一个错误,错误代码是C4996,编译器警告登记为3级,打开查看了一下详情,貌似是由于strcpy不太安全,有更安全的strcpy_s
于是我搜索了一下strcpy_s的使用方法,看了一位大神的博客,我的理解是将strcpy换成strcpy_s即可,但是使用的时候不正确,
头文件<cstring>和<string.h>都试了
最后选择了禁用弃用的解决方法:项目属性->C/C++->高级->禁用特定警告编辑:4996解决掉
*/
#include<iostream>
#include<string.h>
using namespace std;
class Test
{
   
private:
	int a;
	char* str;
public:
	Test(int b, char* s)//构造函数
	{
   
		a = b;
		str = 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值