首页 > 其他 > 详细

trivial和non-trivial在构造析构中的作用

时间:2014-03-12 15:16:03      阅读:330      评论:0      收藏:0      [点我收藏+]
triavial通常是指没有意义,在构造类对象的时候,有时候编译器会自动生成构造函数(拷贝构造以及=号运算符号),有时候这些函数对于用户来说是没有意义的(尤其是在类里边有动态分配的指针时)。但在以下4种情况下,缺省的构造函数是有意义的:
1.类里边有其他类变量(该类有缺省构造函数)
2.类是从另外一个类继承而来(基类有缺省构造函数)
3.类里边有虚函数。
4.虚继承的情况。


在《源码剖析》中,对象的内存分配和构造、析构是分开的,调用construct时,没有疑问,会在已分配好的内存上来构造对象。
bubuko.com,布布扣//这里调用placement new,调用T1::T1(__value)来构造对象。

关于placement new的用法,http://www.cnblogs.com/felixYeou/archive/2009/04/15/1436209.html这篇文章讲的很详细。

如果对象需要析构,分为特化和泛化版本,特化版本包括:指针对象、char*、wchar_t*。
泛化版本包括用户自己定义的类型。

特化版本:
     指针,直接调用指针所指对象的析构函数
     char*和wchar_t*,不需要析构,无视

泛化版本:
     用类型萃取器提取类型,判断是否有non-trivial的对象,若是有,则需要为整个内存一次次调用对象的构造函数,如果没有,则什么都不做。因为不用浪费时间在析构他们上,和char*、wchar_t*是一样的对待。

trivial和non-trivial在构造析构中的作用,布布扣,bubuko.com

trivial和non-trivial在构造析构中的作用

原文:http://blog.csdn.net/gzxcyy/article/details/21075543

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!