C ++ - 什么时候对象被破坏了

问题描述 投票:1回答:2

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

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

当达到关闭}时,ta变量超出范围,一切都被清理干净。在许多情况下,我不需要调用任何TestArea方法 - 这就足够了:

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

即没有与TestArea实例相关联的左值。现在我的问题是 - 在这个地方何时会召唤TestArea析构函数?后一个代码实际上似乎有效 - 但我对它有点不安。

c++ rvalue
2个回答
4
投票

TestArea("name_of_test");

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

因此,一旦使用它的表达式结束,那么该对象就不再存在。


1
投票

在这两种情况下,都会创建一个对象,当它超出范围时会被破坏。

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

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

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

这将创建3个临时对象,这些对象全部保留在范围内,直到到达终止;

© www.soinside.com 2019 - 2024. All rights reserved.