0

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

typedef int I;

I i;

int main()
{
    i.~I();
}

我知道析构函数是特殊的成员函数(标准中有一个定义)。但是有没有办法显式定义一个函数将在调用伪析构函数时调用?目前尚不清楚为什么允许对此类类型进行伪析构函数调用。

4

1 回答 1

5

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

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

附录:但是,您可以定义一个自定义分配器,其destroy功能除了销毁对象之外还做一些额外的事情,因此您可以使其不是int. 请注意,采用分配器参数的标准库容器将始终使用该分配器来销毁对象,而不是~T()直接调用它们。

于 2014-07-05T14:38:10.150 回答