为标量类型显式定义析构函数

Explicitly defined destructor for scalar type

本文关键字:定义 析构函数 标量 类型      更新时间:2023-10-16

如果我们编写下面的代码,它可以正常工作。

typedef int I;
I i;
int main()
{
    i.~I();
}
我知道析构函数是特殊的成员函数(标准中有定义)。但是,是否有一种方法可以显式定义调用伪析构函数时将调用的函数?目前还不清楚为什么允许对这些类型进行伪析构函数调用。

不,标准规定伪析构函数调用是无操作的。(更准确地说,唯一的影响是对.->之前的表达式求值。)

允许伪析构函数调用的原因是,这样您就可以编写可以调用析构函数的模板代码,而不必费心显式检查类型是否为类。

附录:然而,您可以定义一个自定义分配器,它的destroy函数做一些额外的事情,而不仅仅是销毁对象,所以您可以使它不是int的无操作。请注意,接受allocator参数的标准库容器将始终使用该allocator来销毁对象,而不是直接对它们调用~T()