C++ 的类中,在构造函数中调用析构函数会发生什么情况?

还有其他情况也考虑下。在基类中调用,子类会什么情况,在子类中调用呢?... 还有其他情况也考虑下。在基类中调用,子类会什么情况,在子类中调用呢? 展开
 我来答
枚高阳蒯玛
2019-08-24 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:31%
帮助的人:772万
展开全部
析构函数主要作用就是释放资源,避免内存泄漏
如果你的类里面只用到的基本类型,如int
char
double等,系统的默认析构函数其实什么都没有做
但如果你使用了其他的类如vector,string等,系统的默认析构函数就会调用这些类对象的析构函数
如果是自己写析构函数的话,如果你的类里面分配了系统资源,如new了内存空间,打开了文件等,那么在你的析构函数中就必须释放相应的内存空间和关闭相关的文件;这样系统就会自动调用你的析构函数释放资源,避免内存泄漏
Ritzberry
2010-04-30 · TA获得超过453个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:401万
展开全部
就跟调用成员函数一样, 在语法上是可行的
但是由于析构函数的功能,在语义上可能会有无法预料的结果
因为在对象销毁时会隐式调用一次,可能会出问题
同时考虑这个(伪代码)
class a{
a{
type *x=new type;
~a();
*x=xxxxx;//error

}
~a{
delete x;
}
}
这个属于合法不合理的事,除非你析构设计的就是想随时调用都没事。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
能量标杆金百万cq
2010-04-30 · TA获得超过277个赞
知道小有建树答主
回答量:286
采纳率:0%
帮助的人:206万
展开全部
构造函数用于对对象中的变量赋初值,
析构函数用于释放所定义的对象的所有内存空间。

构造函数和析构函数都不需要用户调用的,构造函数在定义对象时自动调用,析构函数当对象的生存期结束的时候会自动的调用。

看看下面的代码吧:
c++类:
#include<stdio.h>
class xx
{
private: //私有成员
int a;
public: //公有成员
xx(int b) //构造函数,类生成时默认调用
{a=b;}
xx() //重载构造函数
{a=0;}
void x(); //公有成员函数
};
void xx::x() //属于xx类的公有成员函数x的函数体
{if(a==0)printf("%d\n",a);}
void main()
{
xx x(0); //定义一个xx类的对象x并调用第一个构造函数进行初始化,也可以用xx x;调用第二个构造函数进行初始化
x.x(); //调用x的x函数
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xrhigh
2010-04-30 · TA获得超过1495个赞
知道小有建树答主
回答量:657
采纳率:0%
帮助的人:832万
展开全部
无论是在基类还是在子类,类的析构函数都是不允许被显式调用的,当你定义了一个指向自定义类的对象的指针,只有在释放这个指针所指向的对象时,类的析构函数才会被编译器隐式调用。所以永远不要期望自己手式调用类的析构函数!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jw5781408
2010-04-30 · TA获得超过111个赞
知道小有建树答主
回答量:145
采纳率:0%
帮助的人:141万
展开全部
析构函数是不能显示调用的
只有系统自动调用
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式