析构函数调用标量类型&未定义的行为

时间:2015-08-26 03:25:57

标签: c++ destructor undefined-behavior built-in-types explicit-destructor-call

我刚写了以下程序&它编译和编译运行正常。 (见现场演示here.

#include <iostream>
typedef int T;
int main()
{
    int a=3;
    std::cout<<a<<'\n';
    a.~T();
    std::cout<<a;
    return 0;
}

为什么程序编译好? 如果我没有错标量类型在C ++中没有构造函数和析构函数。那么,这个程序定义得很好吗?在这种情况下,对析构函数的显式调用是否会破坏 variable a ,否则在执行函数时它会被编译器自动销毁?我知道在生命周期结束后访问对象在C ++中有未定义的行为。但是C ++标准对此有何看法?

我在SO上发现了类似的问题here。 @Columbo给出的答案是:

  

你不能为标量类型调用析构函数,因为它们没有   一。该声明仅适用于您的模板代码   调用你不知道的类型的对象的析构函数 - 它   消除了为标量编写专业化的必要性(甚至是   数组)类型。

所以,我不明白他给出的解释。如果有人使用模板代码解释它会更好,在模板代码中调用析构函数的类型未知的对象。如果有人用简单的例子解释这一点,我将感激不尽。

0 个答案:

没有答案