You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

析构函数被显式delete的类是否属于trivially copyable类型?

#include <type_traits>

struct A {
    ~A() = delete;
};

static_assert(std::is_trivially_copyable_v<A>);
int main() { }

上述代码可以在gcc、clang编译器下正常编译通过,对应的结论是:析构函数被显式删除的类,只要满足其余判定条件,属于可平凡复制(trivially copyable)类型。

判定依据

根据C++标准的定义,可平凡复制类型的判定规则如下:

  • 类的所有拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符,要么是平凡的,要么被删除
  • 类至少存在一个未被删除的拷贝/移动构造函数、拷贝/移动赋值运算符
  • 类的析构函数是平凡的

很多人存在的误区是认为被delete的析构函数不属于平凡析构,这是混淆了「析构是否可调用」和「析构是否平凡」两个概念:

  • 平凡析构的核心判定要求是析构函数非用户提供(user-provided),显式用= delete声明的析构函数不属于用户提供的函数,只要类没有虚函数、虚基类,所有非静态成员和基类的析构都是平凡的,那该类的析构函数就属于平凡析构,哪怕它被标记为删除。
  • 析构函数被删除仅代表你无法手动销毁该类的实例,不影响可平凡复制类型的判定。

内容的提问来源于stack exchange,提问作者vbstb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:33:02