离开作用域时 释放/析构对象的顺序次序
离开作用域时, 空间回溯
void func(){
Obj o1;
Obj o2;
return/throw; ' 即, 会导致: 离开当前作用域 '
}
当离开当前作用域时, 会从当前退出点 往上回溯, 进行析构
析构的顺序是: ~o2
-> ~o1
即, 越往下 越先析构
非static
Obj o;
int main(){}
- 1:
o的构造函数
- 2:
main函数
- 3:
o的析构
static
static Obj o;
int main(){}
- 1:
o的构造函数
- 2:
main函数
- 3:
o的析构
一定要注意这里, 不要以为, static会泄漏内存!!!
不管是全局域 还是 函数域里的 static, 都不会 泄漏内存!!!
只是一个时机的问题!!! static的变量, 在离开作用域 不会析构
, 而是在main函数结束后 才会析构!!!
只有new的内存, 才会泄漏内存!!!
异常
string func(){
Obj a;
throw 123;
return "abc";
}
todo: (好像, 外部catch( int )到, 才会(~a)); 如果没有捕获异常 则不会析构