Tru*_*eon 20 c++ destructor exit
假设我有以下代码:
struct mytype
{
~mytype() { /* do something like call Mix_CloseAudio etc */ }
};
int main()
{
mytype instant;
init_stuff();
start();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即使从start()内部的某个地方使用exit(),是否可以保证调用析构函数?
Jam*_*lis 25
如果调用exit,则不会调用析构函数.
从C++标准(§3.6.1/ 4):
调用函数
void exit(int);
Run Code Online (Sandbox Code Playgroud)
<cstdlib>(18.3)中声明的程序终止程序而不离开当前程序段,因此不会破坏任何具有自动存储持续时间的对象(12.4).如果在销毁具有静态存储持续时间的对象期间调用exit来结束程序,则程序具有未定义的行为.
小智 17
是的,调用exit()意味着不会调用析构函数:
调用函数void exit(int);
<cstdlib>(18.3)中声明的程序终止程序而不离开当前程序段,因此不会破坏任何具有自动存储持续时间的对象(12.4).如果在销毁具有静态存储持续时间的对象期间调用exit来结束程序,则程序具有未定义的行为.
另一方面,如果抛出异常,则将调用析构函数.这是C++中异常安全的基础.
| 归档时间: |
|
| 查看次数: |
4597 次 |
| 最近记录: |