C++ 的类中,在构造函数中调用析构函数会发生什么情况?
6个回答
展开全部
析构函数主要作用就是释放资源,避免内存泄漏
如果你的类里面只用到的基本类型,如int
char
double等,系统的默认析构函数其实什么都没有做
但如果你使用了其他的类如vector,string等,系统的默认析构函数就会调用这些类对象的析构函数
如果是自己写析构函数的话,如果你的类里面分配了系统资源,如new了内存空间,打开了文件等,那么在你的析构函数中就必须释放相应的内存空间和关闭相关的文件;这样系统就会自动调用你的析构函数释放资源,避免内存泄漏
如果你的类里面只用到的基本类型,如int
char
double等,系统的默认析构函数其实什么都没有做
但如果你使用了其他的类如vector,string等,系统的默认析构函数就会调用这些类对象的析构函数
如果是自己写析构函数的话,如果你的类里面分配了系统资源,如new了内存空间,打开了文件等,那么在你的析构函数中就必须释放相应的内存空间和关闭相关的文件;这样系统就会自动调用你的析构函数释放资源,避免内存泄漏
展开全部
就跟调用成员函数一样, 在语法上是可行的
但是由于析构函数的功能,在语义上可能会有无法预料的结果
因为在对象销毁时会隐式调用一次,可能会出问题
同时考虑这个(伪代码)
class a{
a{
type *x=new type;
~a();
*x=xxxxx;//error
}
~a{
delete x;
}
}
这个属于合法不合理的事,除非你析构设计的就是想随时调用都没事。
但是由于析构函数的功能,在语义上可能会有无法预料的结果
因为在对象销毁时会隐式调用一次,可能会出问题
同时考虑这个(伪代码)
class a{
a{
type *x=new type;
~a();
*x=xxxxx;//error
}
~a{
delete x;
}
}
这个属于合法不合理的事,除非你析构设计的就是想随时调用都没事。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
构造函数用于对对象中的变量赋初值,
析构函数用于释放所定义的对象的所有内存空间。
构造函数和析构函数都不需要用户调用的,构造函数在定义对象时自动调用,析构函数当对象的生存期结束的时候会自动的调用。
看看下面的代码吧:
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函数
}
析构函数用于释放所定义的对象的所有内存空间。
构造函数和析构函数都不需要用户调用的,构造函数在定义对象时自动调用,析构函数当对象的生存期结束的时候会自动的调用。
看看下面的代码吧:
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函数
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无论是在基类还是在子类,类的析构函数都是不允许被显式调用的,当你定义了一个指向自定义类的对象的指针,只有在释放这个指针所指向的对象时,类的析构函数才会被编译器隐式调用。所以永远不要期望自己手式调用类的析构函数!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
析构函数是不能显示调用的
只有系统自动调用
只有系统自动调用
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询