首先,sizeof(T()) 是一个错误写法,它的意图是计算函数类型 T()的大小,T() 即一个参数为空,返回类型为 T 的函数类型。但是 sizeof
的参数不能是函数类型! 所以你的问题跟 T 能不能析构没有关系。第二, C++17 起要求 sizeof 的参数必须可析构: #include
struct Foo { Foo() = default; private: ~Foo() = delete; }; size_t sz1() {
return sizeof(Foo); // 正确 } size_t sz2() { return sizeof(Foo{}); // 错误 }
因此,如果有一个析构函数不可访问的类型 Foo,依旧可以正常计算它的 size,但是不能对它的对象计算 sizeof