C++中的trivial destructor
转:http://blog.csdn.net/wudishine/article/details/12307611
  如果用户不定义析构函数,而是系统自带的,那么说明析构函数基本没什么用(但默认会被调用)。我们称之为trivial destructor。反之,如果特别定义了析构函数,则说明需要在释放空间之前做一些事情,则这个析构函数称之为non-trivial destructor。如果某个类中只有基本类型的话是没有必要调用析构函数的,delete的时候基本不会产生析构代码。
  在C++的类中如果只有基本的数据类型,也就不需要写显式的析构函数,即用默认析构函数就够用了,但是如果类中有个指向其他类的指针,并且在构造时候分配了新的空间,则在析构函数中必须显式释放这块空间,否则会产生内存泄露。
  在STL中空间配置时候destory()函数会判断要释放的迭代器的指向的对象有没有 trivial destructor(STL中有一个 has_trivial_destructor函数,很容易实现检测)放,如果有trivial destructor则什么都不做,如果没有即需要执行一些操作,则执行真正的destory函数。destory()有两个版本,第一个版本接受一个指针,准备将该指针所指之物析构掉,第二个版本接受first和last两个迭代器,准备将[first,last]范围内的所有对象析构掉。我们不知道这个范围有多大,万一很大,而每个对象的析构函数都无关痛痒,那么一次次调用这些析构函数,对效率是一种伤害,因此这里首先利用value_type()获得迭代器所指对象的类别,再利用_type_traits判断该型别的析构函数是否无关痛痒,若是(_true_type),则什么也不做就结束,若否(_false_type),这才以循环的方式巡访整个范围,并在循环中每经历一个对象就调用第一个版本的destory()。

C++中的trivial destructor和non-trivial destructor相关推荐

  1. C++11中的POD和Trivial

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

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

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

  3. Qt中标准对话框实例,QObject::tr()的作用

    函数 tr()全名是QObject::tr(),被它处理的 字符串可以 使用工具提 取出来翻译 成其他语言, 也就是做国际化使用. 只要记住,Qt 的最佳实践:如果你想让你的程序国际化的话,那么,所有 ...

  4. 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法

    在不同的平台编译的时候,会用到一些系统内置的变量,比如操作系统名称,版本号之类: CMAKE_SYSTEM:系統全名,如 "Linux-2.4.22″,"FreeBSD-5.4-R ...

  5. sql server运算符_SQL Server执行计划中SELECT运算符的主要概念

    sql server运算符 One of the main responsibilities of a database administrator is query tuning and troub ...

  6. 如何避免自由软件项目中的需求变更

    Photo by John Schnobrich on Unsplash John Schnobrich在Unsplash上的照片 A decade ago, when I signed up on ...

  7. C++中的断言机制与gtest单元测试

    目录 一.C++中的断言机制 1.传统的运行时断言 2.C++11编译时断言 二.单元测试和gtest介绍 1.单元测试介绍 2.常见单元测试介绍(测试框架) 3.gtest介绍 三.gtest的安装 ...

  8. Finalize/Dispose/Destructor

    我总是会搞混这些东西,还是写下来帮助记忆. Finalize 即Object.Finalize(),C#中不允许使用Finalize,析构器就等价于Finalize. Destructor 析构器(D ...

  9. Delphi常见各类编译错误信息-中英对照

    整理自网上的文章,也忘了出处,无意冒犯,如有侵权,请提前通知,本博客将及时处理. 一. 编译错误信息 ';' not allowed before 'ELSE' ElSE前不允许有";&qu ...

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

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

最新文章

  1. java中的4种引用以和GC Roots
  2. 端到端训练 联合训练_曲靖两家银行举行联合军事拓展训练 献礼祖国71周年华诞...
  3. android 异步刷新 方法,android应用中实现异步更新UI的方法有哪些
  4. vue可视化拖拽生成工具_vdesjs: 基于vue的可视化拖拽,代码生成工具。提升前端开发效率,或者集成至项目作为在线拖拽工具。(持续迭代升级中)...
  5. Linux命令关机/重启和Windows系统dos命令关机/重启
  6. 索引-前端技术-pyhui版
  7. UVA12022 Ordering T-shirts【数学+打表】
  8. Linux uname命令
  9. 通信与信息系统专业排名全国前十的…
  10. 关于下载的NetMeeting无法共享的解决办法
  11. Error writing to process file pid.nbf问题
  12. 设备无法使用、驱动载入异常(39){无法取得路径} 路径 %hs 不存在
  13. linux-redis设置密码
  14. LaTex学习教程——插入较复杂的表格(合并、换行以及加标题)
  15. stm32_GPIO模拟I2c读写EEPROM
  16. java作用域范围_比较java中四个域的作用域范围大小
  17. go 文件读Read and ReadString
  18. linux安装IBM Webshere MQ以及配置
  19. 【091】肖邦《降B小调第一夜曲》
  20. opencv打卡49:开运算 cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

热门文章

  1. Android LocalServices解耦妙用: system_server进程中各个服务之间的连通器LocalServices
  2. Python3网络爬虫教程7——SSL数字证书
  3. mac风扇控制_如何监视和控制Mac的风扇
  4. Minimum supported Gradle version is 6.1.1. Current version is 5.6.4
  5. 学期博客:学习进度条
  6. python 爬取淘宝第二弹(淘宝数据爬取)
  7. 发送的邮件被标记垃圾邮件_如何以HTML格式标记跨邮件通讯
  8. Redis主从复制(master/slaver)
  9. 自学python的痛楚,来报团报吧
  10. 新历(公历、西历)转换农历(精确…