转:http://blog.csdn.net/wudishine/article/details/12307611

如果用户不定义析构函数,而是用系统自带的,则说明,析构函数基本没有什么用(但默认会被调用)我们称之为trivial destructor。反之,如果特定定义了析构函数,则说明需要在释放空间之前做一些事情,则这个析构函数称为non-trivial destructor。如果某个类中只有基本类型的话是没有必要调用析构函数的,delelte p的时候基本不会产生析构代码。

在C++的类中如果只有基本的数据类型,也就不需要写显式的析构函数,即用默认析构函数就够用了,但是如果类中有个指向其他类的指针,并且在构造时候分配了新的空间,则在析构函数中必须显式释放这块空间,否则会产生内存泄露,

在STL中空间配置时候destory()函数会判断要释放的迭代器的指向的对象有没有 trivial destructor(STL中有一个 has_trivial_destructor函数,很容易实现检测)放,如果有trivial destructor则什么都不做,如果没有即需要执行一些操作,则执行真正的destory函数。destory()有两个版本,第一个版本接受一个指针,准备将该指针所指之物析构掉,第二个版本接受first和last两个迭代器,准备将[first,last]范围内的所有对象析构掉。我们不知道这个范围有多大,万一很大,而每个对象的析构函数都无关痛痒,那么一次次调用这些析构函数,对效率是一种伤害,因此这里首先利用value_type()获得迭代器所指对象的类别,再利用_type_traits<T>判断该型别的析构函数是否无关痛痒,若是(_true_type),则什么也不做就结束,若否(_false_type),这才以循环的方式巡访整个范围,并在循环中每经历一个对象就调用第一个版本的destory()。

c++中的 trivial destructor相关推荐

  1. C++中的trivial和non-trivial构造/析构/拷贝/赋值函数及POD类型

    在侯捷的<STL源码剖析>里提到trivial和non-trivial及POD类型,相关知识整理如下. trivial意思是无意义,这个trivial和non-trivial是对类的四种函 ...

  2. C++中析构函数(Destructor)

    类对象在创建时自动调用的构造函数,在对象销毁时也会自动调用一个函数,它也和类名同名,也没有返回值,名字前有一个波浪线~,用来区分构造函数,它的作用主要是用做对象释放后的清理善后工作.它就是析构函数. ...

  3. C++中POD和trival语义

    最近在看STL源码剖析,书中提到trivial destructor和no-trivial destructor,初次见到对trivial这个概念非常陌生,经过查资料,又发现一个陌生的概念POD,实在 ...

  4. 【C/C++面经_其他问题】

    1.C++的多态如何实现 2.为什么析构函数一般写成虚函数 3.构造函数能否声明为虚函数或者纯虚函数,析构函数呢? 4.基类的虚函数表存放在内存的什么区,虚表指针vptr的初始化时间 5.模板函数和模 ...

  5. C++11中的POD和Trivial

    引子 在介绍C++11的文章或者博客中,经常会出现POD类型和Trivial类型的影子.但是POD类型和Trivial类型到底是什么意思呢? POD类型 POD类型的好处 POD类型 粗略上来讲,PO ...

  6. C++ 11 中的POD

    POD 是英文中Plain Old Data 的缩写,意如其名. Plain 表示了POD 是普通的类型, C++中常见的类型都是这样的属性,而不像一些存在着虚函数虚继承的类型那么特别. Old 则体 ...

  7. 一篇文章搞懂STL中的空间配置器allocator(原创,多图,易懂)

    Table of Contents 0.引入 1.标准的空间配置器allocator 2.更为高效的空间配置器alloc 2.1----对象的构造与析构 2.1.1 对象的构造:::construct ...

  8. (转)剖析Delphi中的构造和析构

    剖析Delphi中的构造和析构 1 Delphi中的对象模型: 2 1.1 对象名表示什么? 2 1.2 对象存储在哪里? 2 1.3 对象中存储了什么?它们是如何存储的? 3 2 构造函数与创建对象 ...

  9. .NET中的内存管理,GC机制,内存释放过程

    引言:作为一个.NET程序员,我们知道托管代码的内存管理是自动的..NET可以保证我们的托管程序在结束时全部释放,这为我们编程人员省去了不少麻烦,我们可以连想都不想怎么去管理内存,反正.NET自己会保 ...

  10. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

最新文章

  1. 为什么要做scan extraction?
  2. java 常量变量使用_java常量和变量入门教程
  3. amqp rabbitmq_通过Spring Integration和RabbitMQ获得高可用性的AMQP支持的消息通道
  4. 一个带新闻,天气的时钟Widget(三)---Webservices篇
  5. RabbitAdmin 实战
  6. 中国企业500强完整榜单,请为自己和孩子收藏
  7. Microsoft经典平面广告we see
  8. Solidwork SW许可限制,许可加入白名单
  9. QT5-STK二次开发实例
  10. Windows Server 2008 R2 企业版操作说明手册
  11. 实体机黑苹果安装教程
  12. 逆向爬虫11 selenium基础
  13. emacs ido模式
  14. 高山仰止,景行行止。虽不能至,然心向往之。
  15. 【Mac版word转PPT技巧】谁说Word转PPT在Mac电脑中不能实现?
  16. GrayLog日志平台
  17. proteus仿真-单片机-超声波测距报警
  18. 平替SD3403/SS928对标Hi3559A可以朔源的处理器 GK7608RFCFV100
  19. centos8安装zabbix5.0(mysql,Nginx)
  20. QT: 界面隐藏后台显示

热门文章

  1. 【室内园艺】——栀子花
  2. 写在2019年的最后一天,有感而发
  3. 「Python入门」Python多进程
  4. 视频编码中的I帧、P帧、B帧的概念和特点
  5. 【区块链108将】千方基金点付大头:投资区块链,不要让过往认知限制你的想象...
  6. 网页上传文件获取地址的问题
  7. 一百个超级值得收藏网站,确定看见不点开看看嘛
  8. 华为q1设置虚拟服务器,华为路由Q1上网设置【图文】教程 | 192路由网
  9. matlab 变限积分计算,Matlab变限积分计算【方法教程】
  10. 淘宝手淘首页金字塔流量爬升法|运营狗