2.解释一下什么是trivial destructor

发布时间 2023-08-02 22:22:17作者: CodeMagicianT

2.解释一下什么是trivial destructor

什么是 trivial destructor和 non-trivial destructor

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

在C++的类中如果只有基本的数据类型,也就不需要写显式的析构函数,即用默认析构函数就够用了,但是如果类中有个指向其他类的指针,并且在构造时候分配了新的空间,则在析构函数中必须显式释放这块空间,否则会产生内存泄露,在STL中空间配置时候destory()函数会判断要释放的迭代器的指向的对象有没有 trivial destructor(STL中有一个 has_trivial_destructor函数,很容易实现检测),如果有trivial destructor则什么都不做,如果没有即需要执行一些操作,则执行真正的destory函数。

trivial意思是无意义,这个trivial和non-trivial是对类的四种函数来说的:

●构造函数(ctor)
●复制构造函数(copy)
●赋值函数(assignment)
●析构函数(dtor)

如果至少满足下面3条里的一条:

●显式(explict)定义了这四种函数。
●类里有非静态非POD的数据成员。
●有基类。

那么上面的四种函数是non-trivial函数,比如叫non-trivial ctor、non-trivial copy…,也就是说有意义的函数,里面有一下必要的操作,比如类成员的初始化,释放内存等。

参考:[C++ trivial和non-trivial构造函数及POD类型](