如果我们编写以下代码,它可以正常工作。
typedef int I;
I i;
int main()
{
i.~I();
}
我知道析构函数是特殊的成员函数(标准中有一个定义)。但有没有办法明确定义函数将在调用伪析构函数时调用?目前尚不清楚为什么允许伪析构函数调用此类型。
答案 0 :(得分:5)
不,标准说伪析构函数调用是无操作。 (更准确地说,唯一的影响是在.
或->
之前评估表达式。)
允许伪析构函数调用的原因是您可以编写可以调用析构函数的模板代码,而无需明确检查类型是否为类。
附录:但是,您可以定义一个自定义分配器,其destroy
函数除了销毁对象之外还执行其他操作,因此您可以使它不是{{{}}的无操作1}}。请注意,采用allocator参数的标准库容器将始终使用该分配器来销毁对象,而不是直接在其上调用int
。