C ++-何时销毁对象

时间:2019-03-03 19:58:00

标签: c++ rvalue

我有一个类,该类充当用于测试的临时目录的句柄。它的用法如下:

LocalTime

当达到结束{ TestArea ta("name_of_test"); ta.call_method( ); test_stuff( ); ... } 时,}变量将超出范围,并且将清除所有内容。在许多情况下,我不需要调用任何ta方法-这足够了:

TestArea

即没有与{ TestArea("name_of_test"); test_stuff(); } 实例关联的左值。现在我的问题是-什么时候在这个地方调用TestArea析构函数?后面的代码实际上似乎可以工作-但对此我有点不舒服。

2 个答案:

答案 0 :(得分:4)

使用

TestArea("name_of_test");

您创建一个临时对象,该临时对象将立即被破坏

因此,使用该表达式的表达式结束后,该对象将不再存在。

答案 1 :(得分:1)

在两种情况下,对象都会被创建并在超出范围时被破坏。

在第一种情况下,将创建一个命名对象ta,该对象在到达最接近的结束点}时会超出范围。

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

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

这将创建3个临时对象,这些临时对象将一直保留在作用域中,直到到达终止点;