析构函数什么时候调用啊
6个回答
展开全部
在这个对象的作用域最后..
比如你在main里面声明了一个类A..那么~A()会在main结束时调用..
如果在自定义的函数f()里面声明了一个A 函数f结束的时候就会调用~A()
或者你delete 指向A的指针..
或者显式的调用析构函数
比如你在main里面声明了一个类A..那么~A()会在main结束时调用..
如果在自定义的函数f()里面声明了一个A 函数f结束的时候就会调用~A()
或者你delete 指向A的指针..
或者显式的调用析构函数
追问
也就是说在包含该对象的函数的末尾就会调用析构函数喽?
追答
是的....
局部的对象 在该对象声明的函数末尾被释放...
你可以看下作用域的定义..析构函数就是在对象的作用域的末尾释放
为了不误导人...我还是举个例子..
如果是
class A
{
....
}
void f()
{
A a;
//这种情况a的作用域就是整个函数 在f末尾释放
}
void f()
{
for(A a;a.yes();a++)//这里声明的是一个计数器a..(这种情况一般是迭代器)..
{
...
}
//这里是a作用域结束的时候 调用析构函数
}
void f()
{
A* p=new A;
delete p;//A作用域结束 调用析构
}
如果A是全局对象..那么就在程序末尾释放
显式的调用很少见..我就不举例了..
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单地说:析构函数是为你的类创建的对象处理后事用的,所以它的调用时机就类创建出来的对象的生命周期结束的时候。
举个例子:
class clsA
{
public:
clsA(){ }; // 构造函数
~clsA(){ }; // 析构函数
}
void main()
{
clsA a; // 上述构造函数被调用;
return; // 在这条语句执行之前,析构函数被调用,因为对象a死到临头了
}
举个例子:
class clsA
{
public:
clsA(){ }; // 构造函数
~clsA(){ }; // 析构函数
}
void main()
{
clsA a; // 上述构造函数被调用;
return; // 在这条语句执行之前,析构函数被调用,因为对象a死到临头了
}
追问
那就是在主函数结束时调用喽?
追答
这只是一个例子,在上述例子中,类claA的对象a的析构函数的调用时机,就是主函数结束的时候。但不是说所有的情况都如此。
意思是:只要你的类的对象完成了自己的任务,需要结束自己的生命周期的时候,就会调用析构函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
析构函数对象生命周期结束,被销毁时调用。析构函数与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后”的工作,例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这么简单还用问?如果这些变量在堆栈中,一旦出了范围,析构函数将被调用,自动堆变量,你需要调用delete方法来释放资源此功能是释放资源退栈的过程或作业系统
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询