析构函数的初学

目录

一、什么是析构函数

二、析构函数和数组

三、析构函数和运算符delete

四、析构函数在对象作为函数返回值(临时对象)返回后被调用

五、栈中对象释放顺序

六、经典代码(栈中对象释放:先进后出)

七、注意


一、什么是析构函数

  • 名字和类名相同,在前面加‘~’, 没有参数和返回值,一个类最多只能有一个析构函数 
  • 析构函数对象消亡时即自动被调用。可以定义析构函数来在对象消亡前做善后工作,比如释放分配的空间等 
  • 如果定义类时没写析构函数,则编译器自动生成缺省析构函数。缺省析构函数什么也不做
#include
using namespace std;
class A
{
	public:
		A()
		{
			cout<<"构造函数"<

二、析构函数和数组

  • 对象数组生命期结束时,对象数组的每个元素的析构函数都会被调用 
#include
using namespace std;
class text
{
	public:
		~text()
		{
			cout<<"1111"<

三、析构函数和运算符delete

  • delete运算导致析构函数调
  • 栈中内存由系统自动分配和释放;使用new创建的指针对象在堆中分配内存,不需要时,需要手动释放
代码举例一:有new出来的对象,没有delete
#include
using namespace std;
class A
{
	public:
		A()
		{
			cout<<"构造函数"<
代码举例二:有new和delete
#include
using namespace std;
class A
{
	public:
		A()
		{
			cout<<"构造函数"<
代码举例三:new一个对象数组,delete []
#include
using namespace std;
class A
{
	public:
		A()
		{
			cout<<"构造函数"<
using namespace std;
class A
{
	public:
		A()
		{
			cout<<"构造函数"<

四、析构函数在对象作为函数返回值(临时对象)返回后被调用

#include
using namespace std;
class cmyclass
{
	public:
		~cmyclass()
		{
			cout<<"destructor"<

五、栈中对象释放顺序

  • 先创建的后释放,后创建的先释放(先进后出)  
#include
using namespace std;
class A
{
	private:
		int id;
	public:
		A(int i)
		{
			id=i;
			cout<构造函数"<析构函数"<

析构函数的初学_第1张图片

六、经典代码(栈中对象释放:先进后出)

析构函数的初学_第2张图片

                  

七、注意

  • 如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数;有资源申请时,一定要写,否则会造成资源泄漏

你可能感兴趣的:(面向对象编程c++,c++)