【发布时间】:2018-03-10 09:36:26
【问题描述】:
考虑以下代码:
#include <iostream>
typedef int t;
t a=42;
int main()
{
a.t::~t();
std::cout << a; //42
}
我预计a 将被销毁。但事实并非如此,为什么呢?那个伪析构函数调用会如何销毁对象?
【问题讨论】:
-
如果它被“摧毁”了,你会期待什么?在对象的生命周期结束后访问对象具有未定义的行为。
-
请定义“销毁”。您预计会发生什么/不会发生什么?
-
@Mankarse 我预计没有 a 表示的对象。但是 a 仍然表示一个 int 类型的对象,其值等于 42
-
@DmitryFucintv:嗯……如果它被破坏了,代码会有未定义的行为。该标准对包含未定义行为的代码施加无要求,因此
a仍表示具有值42的int将是对代码的一种可能解释(如果代码确实导致a的生命周期结束)。
标签: c++ language-lawyer destructor primitive-types explicit-destructor-call