c++中的 trivial destructor
转: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相关推荐
- C++中的trivial和non-trivial构造/析构/拷贝/赋值函数及POD类型
在侯捷的<STL源码剖析>里提到trivial和non-trivial及POD类型,相关知识整理如下. trivial意思是无意义,这个trivial和non-trivial是对类的四种函 ...
- C++中析构函数(Destructor)
类对象在创建时自动调用的构造函数,在对象销毁时也会自动调用一个函数,它也和类名同名,也没有返回值,名字前有一个波浪线~,用来区分构造函数,它的作用主要是用做对象释放后的清理善后工作.它就是析构函数. ...
- C++中POD和trival语义
最近在看STL源码剖析,书中提到trivial destructor和no-trivial destructor,初次见到对trivial这个概念非常陌生,经过查资料,又发现一个陌生的概念POD,实在 ...
- 【C/C++面经_其他问题】
1.C++的多态如何实现 2.为什么析构函数一般写成虚函数 3.构造函数能否声明为虚函数或者纯虚函数,析构函数呢? 4.基类的虚函数表存放在内存的什么区,虚表指针vptr的初始化时间 5.模板函数和模 ...
- C++11中的POD和Trivial
引子 在介绍C++11的文章或者博客中,经常会出现POD类型和Trivial类型的影子.但是POD类型和Trivial类型到底是什么意思呢? POD类型 POD类型的好处 POD类型 粗略上来讲,PO ...
- C++ 11 中的POD
POD 是英文中Plain Old Data 的缩写,意如其名. Plain 表示了POD 是普通的类型, C++中常见的类型都是这样的属性,而不像一些存在着虚函数虚继承的类型那么特别. Old 则体 ...
- 一篇文章搞懂STL中的空间配置器allocator(原创,多图,易懂)
Table of Contents 0.引入 1.标准的空间配置器allocator 2.更为高效的空间配置器alloc 2.1----对象的构造与析构 2.1.1 对象的构造:::construct ...
- (转)剖析Delphi中的构造和析构
剖析Delphi中的构造和析构 1 Delphi中的对象模型: 2 1.1 对象名表示什么? 2 1.2 对象存储在哪里? 2 1.3 对象中存储了什么?它们是如何存储的? 3 2 构造函数与创建对象 ...
- .NET中的内存管理,GC机制,内存释放过程
引言:作为一个.NET程序员,我们知道托管代码的内存管理是自动的..NET可以保证我们的托管程序在结束时全部释放,这为我们编程人员省去了不少麻烦,我们可以连想都不想怎么去管理内存,反正.NET自己会保 ...
- GNU Make 使用手册(于凤昌中译版)
GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...
最新文章
- 为什么要做scan extraction?
- java 常量变量使用_java常量和变量入门教程
- amqp rabbitmq_通过Spring Integration和RabbitMQ获得高可用性的AMQP支持的消息通道
- 一个带新闻,天气的时钟Widget(三)---Webservices篇
- RabbitAdmin 实战
- 中国企业500强完整榜单,请为自己和孩子收藏
- Microsoft经典平面广告we see
- Solidwork SW许可限制,许可加入白名单
- QT5-STK二次开发实例
- Windows Server 2008 R2 企业版操作说明手册
- 实体机黑苹果安装教程
- 逆向爬虫11 selenium基础
- emacs ido模式
- 高山仰止,景行行止。虽不能至,然心向往之。
- 【Mac版word转PPT技巧】谁说Word转PPT在Mac电脑中不能实现?
- GrayLog日志平台
- proteus仿真-单片机-超声波测距报警
- 平替SD3403/SS928对标Hi3559A可以朔源的处理器 GK7608RFCFV100
- centos8安装zabbix5.0(mysql,Nginx)
- QT: 界面隐藏后台显示