C++ - 对象何时销毁

C++ - when is object destroyed

我有一个 class 用作用于测试的临时目录的句柄。它是这样使用的:

{
    TestArea ta("name_of_test");
    ta.call_method( );
    test_stuff( );
    ...
}

当到达结束 } 时,ta 变量超出范围,所有内容都被清理。在许多情况下,我不需要调用任何 TestArea 方法——这就足够了:

{
    TestArea("name_of_test");
    test_stuff();
}

即没有与 TestArea 实例关联的左值。现在我的问题是 - 什么时候会在这个地方调用 TestArea 析构函数?后面的代码似乎确实有效 - 但我对此有点不安。

TestArea("name_of_test");

您创建了一个临时对象,该临时对象将立即销毁。

所以一旦使用它的表达式结束,那么对象就不再存在了。

在这两种情况下,都会创建对象并在超出范围时销毁对象。

在第一种情况下,创建了一个命名对象 ta,当达到最近的结束 } 时,它超出了范围。

在第二种情况下,创建了一个 未命名的临时 对象,当到达语句末尾的终止 ; 时,该对象超出范围。对于在同一语句中创建的任何临时对象也是如此。例如:

doSomething(T1(), T2(), T3());

这将创建 3 个临时对象,它们都保留在范围内,直到达到终止 ;