为什么这个模板功能成功编译?

时间:2012-01-24 05:53:02

标签: c++ templates types int primitive-types

  

可能重复:
  Destructors of builtin types (int, char etc..)

模板功能:

template<typename T> void kill(T* type)
{
    type->~T();
}

呼叫:

int x= 5;
kill(&x);
哇,它汇编了!?像int这样的原始类型如何具有析构函数?它也适用于charbool等。

2 个答案:

答案 0 :(得分:4)

标准的第12.4.16节

  

16 [注意:显式调用析构函数的表示法可用于任何标量类型   名称(5.2.4)。允许这样就可以编写代码而无需知道是否   析构函数存在于给定类型。例如,

typedef int I;
I* p;
p->I::~I();
     

-end note]

答案 1 :(得分:1)

标准的相关部分是§5.2.4/ 1:

  

在点后使用伪析构函数名称。或箭头 - &gt; operator表示由type-name命名的非类类型的析构函数。结果只能用作函数调用operator()的操作数,并且这种调用的结果类型为void。唯一的效果是在点或箭头之前评估后缀表达式。