c++中静态对象的析构函数的调用问题,求助1

#include<iostream.h>#include<string>classA{public:A(char*str);~A();private:charstring... #include <iostream.h>
#include <string >
class A
{ public:A(char *str);
~A( );
private: char string[50];
};
A::A(char *str)
{ strcpy(string,str);
cout<<"constructor calledfor"<<string<<endl;
}
A::~A()
{ cout<<"destructor called for"<<string<<endl;}
void fun()
{ Afunobject("Fun对象");
static A staticobject("static对象");
cout<<"In fun()"<<endl;
}
A Globalobject("G对象"); //全局对象
void main()
{ AMainobject("Main对象");
cout<<"In Main(), before callingfun\n";
fun( );
cout<<"In Main(), after callingfun\n";
}
结果为:
ctor called forstatic
)
tor called forFun对象
(), after calling fun
tor called forMain对象
tor called forstatic对
tor called forG对象
额,那结果复制错了,没关系了,说一下析构函数的调用过程就可以了
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏20(财富值+成长值)
鎏金阁
2015-05-17 · TA获得超过580个赞
知道小有建树答主
回答量:483
采纳率:80%
帮助的人:355万
展开全部
析构函数的调用是在对象销毁之前。
静态存储类型的生命期是与程序整体相同,与在哪个函数内定义无关。即使函数调用已结束,静态存储仍存在。
要非常清晰地按照自己预想的逻辑走,在程序语句顺序上体现。不要依赖系统隐含的细微顺序,因为那些受系统消息的控制,而消息的顺序细节只有熟悉内核程序段的人才能完全了解。
追问
那为什么先输出静态对象后输出全局对象?
追答
理论上静态存储类型与全局存储类型的生命期是一样的。
至于为什么谁先谁后,只有熟悉内核程序段的人才能完全了解。程序如此编制,处理过程就如此确定,没有为什么。
应用者如果在程序设计中一定要利用系统内在的时序关系,那就花功夫去学习系统内核。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式