2.解释一下什么是trivial destructor

2.解释一下什么是trivial destructor

trivial destructor = 空的、编译器自动生成的、什么都不做的析构函数。

它是 C++ 里对 “无操作析构函数” 的官方定义。

1. 什么时候析构函数是 trivial?

必须同时满足

  1. 你没有自己写析构函数(编译器合成)
  2. 类里没有虚函数
  3. 类里没有虚基类
  4. 所有基类、成员变量的析构函数也都是 trivial

满足 → trivial destructor

不满足 → non-trivial destructor

2. trivial 析构函数做什么?

什么都不做!

  • 不释放内存
  • 不执行任何代码
  • 编译器直接优化掉
class A { int x; }; 
// 编译器生成的析构是 trivial

3. 有什么意义?(面试 / 底层重点)

  1. 效率高:调用时无开销,编译器直接优化掉
  2. 可以安全地用 memcpymemset
  3. 对象销毁时不需要执行析构逻辑
  4. 属于 “平凡类型”,可直接二进制拷贝

4. 反过来:什么时候不是 trivial?

只要出现下面任意一个,就 不是 trivial

  • 你写了 ~A() {}
  • 有虚函数
  • 有虚基类
  • 成员 / 基类有 non-trivial 析构
class A { ~A(){} }; // 非 trivial
class B { virtual f(){} }; // 非 trivial

最终背诵版

trivial destructor 是编译器自动生成、无任何操作的空析构函数。

不含虚函数、虚基类,且所有成员 / 基类都无自定义析构时才是 trivial,

特点是无开销、可安全内存拷贝。

posted @ 2023-08-02 22:17  CodeMagicianT  阅读(322)  评论(0)    收藏  举报