[问题] c++ 实际建立与释放object的时机点

楼主: wheels   2014-07-15 16:28:22
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
预期的结果(Expected Output):
1. ObjA
1. ObjC
1. ObjB
1. ObjD
1. ObjE
1. ObjF
2. ObjD
2. ObjF
2. ObjC
2. ObjA
程式跑出的结果(Wrong Output):
1. ObjA
1. ObjB
1. ObjC
1. ObjD
1. ObjE
1. ObjF
2. ObjD
2. ObjC
2. ObjF
2. ObjA
程式码(Code):(请善用置底文网页, 记得排版)
#inlcude <iostream>
#inlcude <string>
using namespace std;
class OB{
public:
string name;
OB(string name){
this->name = name;
cout << "1. " << this->name << endl;
}
~OB(){
cout << "2. " << this->name << endl;
}
};
void func(){
OB ObjD("ObjD");
OB* pObjE = new OB("ObjE");
static OB ObjF("ObjF");
}
OB ObjA("ObjA");
int main(){
OB* pOB = new OB("ObjB");
OB ObjB("ObjC");
func();
retunr 0;
}
补充说明(Supplement):
昨天去桃园某外台商公司面试的题目,
new没有delete会有memory leak我知道,
但目前我好像有两个地方是错的,分别是:
1. 原来静态宣告完object还没construct,
要等到跑到该行时才会真正建立。
2. destruct的时候会先跑local才跑global(包含static)
请问我对错误的理解对吗?谢谢各位。
作者: chunhsiang (= =)   2014-07-15 17:24:00
这跟变量的生命周期有关系
作者: masan22305 (海豹)   2014-07-16 09:41:00
destruct就记后进先出
作者: Killercat (杀人猫™)   2014-07-16 11:30:00
global一定都是最先ctor最后dtor 这应该没有疑问吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com