当前位置: 首页 > news >正文

pageadmin做的网站的域名必须要备案吗株洲做网站

pageadmin做的网站的域名必须要备案吗,株洲做网站,企业做网站的公司有哪些,无锡建设教育协会网站目录 一、概念 1. 析构函数是什么? 2. 为什么要有析构函数? 3. 怎么用析构函数? 3.1 创建析构函数 3.2 调用析构函数 二、特性 三、由编译器生成的默认析构函数 四、对象的析构顺序 1. 局部对象 2. new出来的堆对象 3. 全局对象 一、概念 1…

目录

一、概念

1. 析构函数是什么?

2. 为什么要有析构函数?

3. 怎么用析构函数?

3.1 创建析构函数

3.2 调用析构函数

二、特性

三、由编译器生成的默认析构函数

四、对象的析构顺序

1. 局部对象

2. new出来的堆对象

3. 全局对象


一、概念

1. 析构函数是什么?

        析构函数是一个特殊的成员函数,用来释放对象使用的资源(如关闭文件、释放内存等)。

2. 为什么要有析构函数?

        如何释放对象申请的系统资源?忘记释放怎么办?能不能在销毁对象时自动释放?

举个小例子:
class Test
{
public://构造函数Test(){_arr = (char*)malloc(1024*1024*1024);//申请1G空间}//销毁函数:用于释放资源void Destory(){free(_arr);}
private:char* _arr;
};int main()
{Test* t = new Test;//在堆上创建一个对象delete t;//销毁一个对象while (1) {}return 0;
}如果要销毁Test对象,必须先使用Destory公有方法来释放资源,否则会造成内存泄漏,
这未免有点麻烦,而且容易忘记,那能否在对象销毁的同时释放资源呢?

将以上程序运行起来,对比前后的内存变化,可以发现销毁对象前如果忘记释放资源,就会造成内存泄漏等问题。

程序运行前: 

程序运行后:


        所以为避免C++使用者在销毁对象时忘记释放对象使用的资源的问题,C++引入了析构函数,在析构函数里写释放资源的代码,在对象销毁时编译器会自动调用析构函数释放对象使用的资源。

        析构函数相对于自己写的销毁函数,其优势在于不需要自己去显示调用。 

3. 怎么用析构函数?

3.1 创建析构函数

        创建时要注意析构函数特征:析构函数名是在类名前加上字符~、无参数无返回值。

        类中动态申请的资源需要在析构函数中写相应的代码手动释放。

用以下例子来说明如何创建无参构造函数和带参构造函数:
创建时要注意析构函数特征:析构函数名是在类名前加上字符~、无参数无返回值。
class Test
{
public://构造函数Test(){_arr = (char*)malloc(1024*1024*1024);//申请1G空间}//析构函数:在析构函数里释放资源,对象被销毁时会自动被调用。~Test(){cout << "析构函数调用成功!" << endl;free(_arr);}
private:char* _arr;
};

3.2 调用析构函数

        在对象销毁时编译器会自动调用析构函数。所以析构函数是不需要我们去显示调用的,我们只需要记得销毁对象(特指堆上的对象)即可。

接上面的例子,演示如何调用无参构造函数和带参构造函数:
int main()
{//在堆上创建对象tTest* t = new Test;for (int i = 0; i < 100000; ++i){cout << i << endl;}//销毁对象tdelete t;return 0;
}


二、特性

        再次强调,析构函数的任务不是销毁对象,而是完成对象中资源的清理工作,对象在销毁时会自动调用析构函数。(对象的内置类型的成员变量由系统进行回收,自定义类型的成员变量系统会去调用它的析构函数。

析构函数是特殊的成员函数,其特征如下:

1. 析构函数名是在类名前加上字符~。

2. 无参数无返回值类型。

3. 对象动态申请的资源需要在析构函数中写相应的代码手动释放。

4. 一个类只能有一个析构函数,析构函数不能重载。

5. 若未显式定义,系统会自动生成默认的析构函数。

6. 对象生命周期结束时,C++编译系统系统自动调用析构函数。


三、由编译器生成的默认析构函数

若未显式定义,系统会自动生成默认的析构函数。


那什么时候需要显示的写析构函数,什么时候让编译器自动生成呢?

        有资源申请(如使用malloc动态开辟空间)时,一定要写,否则会造成资源泄漏。如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数。


四、对象的析构顺序

1. 局部对象

        后实例化的对象先析构,先实例化的对象后析构。因为对象是定义在栈帧里面的,而栈帧的建立遵循后进先出。

class A
{
public:~A(){cout << "A被析构" << endl;}
};class B
{
public:~B(){cout << "B被析构" << endl;}
};class C
{
public:~C(){cout << "C被析构" << endl;}
};int main()
{A a;B b;C c;return 0;
}

2. new出来的堆对象

        堆对象的析构发生在使用delete的时候,与delete的使用顺序相关。

int main()
{A* a = new A();B* b = new B();C* c = new C();delete a;delete b;delete c;return 0;
}

3. 全局对象

        在一个源文件中的全局对象,先实例化的对象后析构。

A a;
B b;
C c;int main()
{return 0;
}


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

http://www.hkea.cn/news/80502/

相关文章:

  • 垂直型电商网站如何做快速排名软件哪个好
  • 做产品推广有网站比较好的免费自助建站平台
  • 番禺网站建设公司排名百度推广页面投放
  • 沈阳做微网站百度收录刷排名
  • 网站建设与管理技术发展seo是什么意思如何实现
  • 手机游戏开发制作公司最新seo视频教程
  • 网站优化过度被k长春seo排名公司
  • wordpress移除谷歌字体seo网站推广与优化方案
  • 十大景观设计公司排名seo权重查询
  • 水友做的yyf网站十大免费引流平台
  • 东莞公司网站制作百度识图网页版 在线
  • 企业级网站内容管理解决方案网站关键词快速排名服务
  • 影视采集网站怎么做收录关键词是网站seo的核心工作
  • 开发一个网站需要多少时间百度账号免费注册
  • 化妆品网站主页设计长沙关键词优化方法
  • 南阳建网站企业百度推广优化工具
  • 怎样把自己做的网页放在网站里如何做宣传推广营销
  • 七谷网络工作室重庆优化seo
  • 东莞网站建设规范软文内容
  • 项目网站建设业务分析搜索优化的培训免费咨询
  • linux做网站服务器吗关键词上首页软件
  • 西安网站建设行业动态手机营销软件
  • 做推送的网站推荐今日新闻摘抄50字
  • 想在自己的网站做支付优化公司治理结构
  • 国内一家做国外酒店团购的网站网络推广优化是干啥的
  • 手机3d动画制作软件重庆网络seo公司
  • 青海和城乡建设厅网站石家庄自动seo
  • 建站网址是多少深圳市seo上词多少钱
  • 应用网站开发创建网站花钱吗
  • 2023太原疫情优化设计答案大全