![]() |
1
37
是的,是的。在任何特定的范围内,局部对象的销毁顺序与它们的构造顺序相反。 |
![]() |
2
11
是的,析构函数是按构造的相反顺序调用的。 |
![]() |
3
11
加上尼尔的回答。 考虑一下,如果相反的情况是正确的,那就是您无法预测堆栈声明变量的析构函数的顺序。这将使得几乎不可能在堆栈上使用依赖值类型。考虑
如果C++不保证析构函数排序,像这样的直截了当的代码将是非常不安全的,因为在T2的析构函数运行之前,T1可能被破坏。因此,不能保证t2的析构函数使用有效的t1值运行。 |
![]() |
4
3
这个问题已经回答了,但我想补充一点,我通常有写这种东西的习惯:
在我看来,这使得意图更加明确。如果您的代码确实是 依靠 在特定的顺序上。我发现这会减少有人不小心更改了顺序,并导致很难找到bug的可能性。(当然,这不是问题,因为我们都有测试,不是吗?)
我总是把多余的括号写在
(*):当然,您也可以使用注释。 |
![]() |
5
0
是的,析构函数与构造函数相反。因为析构函数用于删除不再需要的对象,而构造函数用于创建对象。 |
![]() |
Arnish Grover · 为什么这里两次调用析构函数?[副本] 7 年前 |
![]() |
hvertous · 在析构函数方法中引发异常 7 年前 |
![]() |
Phi Truong · 链表析构函数C++ 7 年前 |
![]() |
allo · C++程序挂起在向量析构函数中 7 年前 |
|
user8185371 · 释放对象的内存与终止内务管理? 8 年前 |
![]() |
Peter Hwang · 销毁列表结构的全局数组 8 年前 |