永发信息网

C++中,直接调用类的构造函数的同时就会调用析构函数

答案:2  悬赏:50  手机版
解决时间 2021-03-08 18:31
例如有一个类 s
class s{
public :
int a;
s() : a(998) {std::cout << "constructor of s" << std::endl; }
~s() {std::cout << "destructor of s" << std::endl; }

}

-----------------------------------
如果 s::s(); 这样调用构造函数后,析构函数紧接着就会被调用
另外~如果这样写:
s *sp = (s*)malloc(sizeof(s));
*sp = s::s(); //在这里,构造函数后也会立即执行析构函数
//注释1
std::cout << sp->a << std::endl; //这里将得到 998,而且即使在注释1的位置使劲往堆里扔数据这里也能得到正常的结果

delete sp; //这里会再次调用析构函数,即整个过程,调用1次构造函数2次析构函数
//但是如果这里用 free(sp) 则不会调用析构

不好意思,分用完了..
谢谢大家
最佳答案
s::s();//构造一个临时的匿名对象,该对象在遇到分号后消亡

*sp = s::s();  //同上,这里s::s()构造的是匿名对象,遇到分号后消亡,

//s::s()的作用是用来做为中间量传给sp,但sp不会消亡

delete sp;//delete调用析构函数 free不会调用,这是常识若有不明白的,请追问,满意请采纳~
全部回答
c++程序子类析构时会调用父类的析构函数。 析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了定义一个对象时先调用基类的构造函数、然后调用派生类的构造 函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。 析构函数: 析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
GTA5为什么老崔要帮FIB做事
建一个长2.5米宽2.2米高2.5米的冷库温度-18度
台式电脑上的无线网络开关在哪
手不能上举跟那些肌肉有关。
十个全覆盖内容是否免费整修
从工作要求出发,编辑需采集的信息有()等。
手指比手掌短的男人
大蒜子可以同芋头一起吃吗?
流量120MB是多少钱
卫生间挂墙壁面盆组合柜买实木的和不锈钢材料
霖水村在什么地方啊,我要过去处理事情
我刚申请的QQ为什么在热聊里,别人看不到我发
急!!焊接铸铁时怎样产生的白口组织?
针灸扎到神经怎么办自己回答别复制!
求两款类似大富翁的游戏
推荐资讯
姓丁,取个好听的名字该取什么名字
请问下我31岁,女,想买个平安保险的平安福,
乒乓球直拍蝴蝶王打单面弧快怎么样?
大家工作到很累、真的很不开心的时候会萌生一
我没上QQ他却问我,你是不是隐身的了,还说你
会理县顾芸商场地址有知道的么?有点事想过去
【互相帮助】形容人与人之间互相帮助、合作等
迈锐宝的顿挫该怎么办
【米脂的婆姨绥德的汉】“米脂的婆姨绥德的汉
【诺曼底号遇难记读后感】诺曼底号遇难记读后
【渴望的天空】渴望自由的天空作文
21题我记得以前做过谢谢
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?