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 个临时对象,它们都保留在范围内,直到达到终止 ;
。
我有一个 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 个临时对象,它们都保留在范围内,直到达到终止 ;
。