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

网站建设的商品分类编码外贸公司网站素材

网站建设的商品分类编码,外贸公司网站素材,wordpress如何搬站,无锡商之道网络科技有限公司目录 一、概念 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.yayakq.cn/news/290442/

相关文章:

  • 重庆网站设计工作室泰州建站价格
  • 外贸平台哪个网站最好不收费专门做民宿的网站
  • 免费ppt课件下载网站安平网站建设
  • 罗村网站制作广告策划书的内容
  • 温岭市市住房和城乡建设规划局网站discuz网站备份
  • 聊城网站建设动态wordpress分类目录页面
  • 静态网站怎么容易做c 网站开发构想
  • o2o平台排名专业网站推广优化
  • 专业电子科技网站建设wordpress 调用单页
  • 营销型网站建设的重要原则做二手车放在哪个网站好
  • 个人网站开发流程winserver wordpress
  • 易网网站百度上广告怎么搞上去的
  • 四川省查询建设证书的网站网站建设的主要步骤
  • 河南如何建网站要什么条件wordpress文章签名插件
  • 做搜索引擎优化对网站有哪些好处自动升级wordpress失败
  • 湄潭建设局官方网站漫画网站模板
  • 做代账的网站软文营销平台
  • 芜湖高端网站建设佛山网站建设优化
  • 曼斯特(北京)网站建设公司丰台怎样做网站
  • 广州手机建设网站潍坊手机网站
  • 移动设备网站开发注意点2018淘宝客网站开发
  • 阿里云的国际网站建设论坛网站用的虚拟主机
  • 网站建设的必要性分析小红书推广运营方案
  • 德阳网站建设平台荥阳企业网站建设
  • 专门做动漫的网站有哪些注册小公司要交税吗
  • 深圳极速网站建设定制微信创建公众号
  • 深圳公司网站推广网站描本链接怎么做
  • 内部劵网站怎么做吉安律师网站建设
  • 闵行做网站dede手机网站模板
  • 文件夹里内容做网站的分类广东网页空间代理