我有一个类,该类充当用于测试的临时目录的句柄。它的用法如下:
LocalTime
当达到结束{
TestArea ta("name_of_test");
ta.call_method( );
test_stuff( );
...
}
时,}
变量将超出范围,并且将清除所有内容。在许多情况下,我不需要调用任何ta
方法-这足够了:
TestArea
即没有与{
TestArea("name_of_test");
test_stuff();
}
实例关联的左值。现在我的问题是-什么时候在这个地方调用TestArea
析构函数?后面的代码实际上似乎可以工作-但对此我有点不舒服。
答案 0 :(得分:4)
使用
TestArea("name_of_test");
您创建一个临时对象,该临时对象将立即被破坏。
因此,使用该表达式的表达式结束后,该对象将不再存在。
答案 1 :(得分:1)
在两种情况下,对象都会被创建并在超出范围时被破坏。
在第一种情况下,将创建一个命名对象ta
,该对象在到达最接近的结束点}
时会超出范围。
在第二种情况下,将创建一个未命名的临时对象,该对象在到达语句末尾的;
时超出范围。对于在同一语句中创建的任何临时对象,情况也是如此。例如:
doSomething(T1(), T2(), T3());
这将创建3个临时对象,这些临时对象将一直保留在作用域中,直到到达终止点;
。