我在代码中使用了额外的括号。我认为当局部变量的作用域结束后,析构函数应该被调用,但实际上并非如此:
class TestClass {
public:
TestClass() {
printf( "TestClass()\n" );
}
~TestClass() {
printf( "~TestClass()\n" );
}
};
int main() {
int a, b, c;
{
TestClass *test = new TestClass();
}
}
它输出:
TestClass()
所以它没有调用TestClass的析构函数,但是为什么呢?如果我手动调用它(delete test),那么它会调用析构函数,对吧。但是为什么在第一个情况下它不调用析构函数呢?
new
创建一个对象,它只能在调用delete
时被销毁 - 它不会在超出作用域时被销毁。 - Nbr44