我在我的代码中使用了额外的括号。我想,当局部变量的作用域结束后析构函数应该叫,但它并没有这样的工作:C++:为什么它不调用析构函数?
class TestClass {
public:
TestClass() {
printf("TestClass()\n");
}
~TestClass() {
printf("~TestClass()\n");
}
};
int main() {
int a, b, c;
{
TestClass *test = new TestClass();
}
}
它输出:
识别TestClass()
所以它不调用TestClass的析构函数,但为什么?如果我手动调用它(删除测试),它会调用析构函数,对。但是为什么它不在第一种情况下调用析构函数?
因为如果你创建了一个对象与'new',它只能调用'它delete'时破坏 - 它不会被走出去的范围被破坏。 – Nbr44
@ Nbr44:不完全正确。你可以直接调用析构函数。当然,这不会释放内存,但会破坏对象。然后,没有未定义行为的情况下正确释放内存的唯一方法是在其位置构建另一个相同类型的对象(通过放置新的对象)并调用delete。 –