首页 > 编程语言 >【自用20.】C++析构函数

【自用20.】C++析构函数

时间:2024-09-10 21:25:39浏览次数:11  
标签:析构 20 函数 int C++ Human include 构造函数

作用

对象销毁前,做清理工作。

具体的清理工作,一般和构造函数对应

比如:如果在构造函数中,使用new分配了内存,就需在析构函数中用delete释放。

如果构造函数中没有申请资源(主要是内存资源),

那么很少使用析构函数。

函数名:

~类型名

没有返回值,没有参数

并且最多只能有一个析构函数

访问权限:

一般都使用public

使用方法:

不能主动调用。对象销毁时,会自动调用。

如果不定义,编译器会自动生成一个析构函数(但是什么也不做)

代码如下

#include <iostream>
#include <Windows.h>
#include <string>
#include <string.h>

using namespace std;

// 定义一个“人类”
class Human {
public:
	Human();
	Human(int age, int salary);
	Human(const Human&);  //不定义拷贝构造函数,编译器会生成“合成的拷贝构造函数”
	Human& operator=(const Human&);
	~Human(); //析构函数
	//......

private:
	string name = "Unknown";
	int age = 28;
	int salary;
	char* addr;
};

Human::Human() {
	name = "无名氏";
	age = 18;
	salary = 30000;

	addr = new char[64];
	strcpy_s(addr, 64, "China");
	cout << "调用默认构造函数-" << this << endl;
}

//......

Human::~Human() {
	cout << "调用析构函数-" << this << endl;  //用于打印测试信息
	delete addr;
}

void test() {
	Human h1;

	{
		Human h2;
	}
	cout << "test()结束" << endl;
}

int main(void) {
	test();

	system("pause");
	return 0;
}

在测试函数中,h2的使用范围就是大括号之内,所以运行完大括号内的语句之后,h2对象将需要被销毁,自动调用析构函数销毁了h2对象,释放了结尾为58的空间

h1的使用范围是整个测试函数,所以测试函数结束的时候,自动调用析构函数销毁了h1对象,释放了结尾是88的空间。

 

标签:析构,20,函数,int,C++,Human,include,构造函数
From: https://blog.csdn.net/m0_57667919/article/details/142033651

相关文章

  • 【自用19.3】C++构造函数复盘
    定义一个“人”类#include<iostream>#include<Windows.h>#include<string>usingnamespacestd;//定义一个“人类”classHuman{public://公有的,对外的 voideat();//方法,“成员函数” voidsleep(); voidplay(); voidwork(); stringgetName(); in......
  • 【自用14】C++俄罗斯方块-思路复盘3
    在上篇降落函数中使用到了判断游戏是否结束的功能,因此这篇先从判断游戏是否结束开始判断游戏是否结束voidfailCheck(void){if(!moveable(START_X,START_Y,MOVE_DOWN,BLOCK_UP)){setcolor(WHITE);setfont(45,0,_T("隶体"));outtextxy(75,300......
  • 【自用21.】C++-this指针
    Human::Human(intage,intsalary){ cout<<"调用自定义的构造函数"<<endl; this->age=age;//this是一个特殊的指针,指向这个对象本身 this->salary=salary; name="无名"; addr=newchar[64]; strcpy_s(addr,64,"China");}......
  • C++入门基础知识61——【关于C++继承】
    成长路上不孤单......
  • C++入门基础知识60——【关于C++ 类 & 对象】
    成长路上不孤单......
  • C++入门基础知识59——【关于C++数据结构】
    成长路上不孤单......
  • C++ 中的左值引用和右值引用
    1、前言概念左值引用一直有这个概念。C++11中才出现了右值引用的概念。注意本文只讨论左值引用和右值引用,但需要提前了解一下左值和右值。//以下的a、p、*p、b都是左值inta=3;int*p=&a;*p;constintb=2;doublex=1.3,y=3.8;......
  • [COCI2019-2020#5] Zapina
    [COCI2019-2020#5]Zapina题意有\(n\)个不同的人和\(n\)道不同的题。第\(i\)个人开心当且仅当他被分配到\(i\)道题。求让至少一个人开心的分配方案数。、思路1定义\(dp_{i,j}\)表示前\(i\)个人发\(j\)道题,没人开心的方案数。答案等于\(n^n-dp_{n,n}\)。\[d......
  • [COCI2020-2021#4] Vepar
    [COCI2020-2021#4]Vepar题意给定两组正整数\(a,a+1,\ldots,b\)和\(c,c+1,\ldots,d\)。判断\(c\times(c+1)\times\ldots\timesd\)能否被\(a\times(a+1)\times\ldots\timesb\)整除。思路将\(c\times(c+1)\times\ldots\timesd\)转化为\(\frac{d!}{(c-1)!}......
  • [COCI2020-2021#3] Vlak
    [COCI2020-2021#3]Vlak题意Nina和Emilija在玩游戏。Nina先手,两人轮流在纸上写下一个字母。每个玩家写下字母后得到的单词必须是该玩家喜欢的歌曲中某个单词的前缀。不能操作的玩家输,判断最后谁会赢。思路对每个玩家喜欢的歌曲建立字典树。搜索每个玩家的操作,每次在两......