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

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

//析构函数和构造函数是一样的情况。也分trivial和non-trivial。

在《源码剖析》中,对象的内存分配和构造、析构是分开的,调用construct时,没有疑问,会在已分配好的内存上来构造对象。
//这里调用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*是一样的对待。

你可能感兴趣的:(c++)