我有一个类作为用于测试的临时目录的句柄。它是这样使用的:
{
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个临时对象,这些对象全部保留在范围内,直到到达终止;
。