C++中 析构函数是用来释放内存,那么自定义的析构函数,能释放内存吗?
答案:7 悬赏:60 手机版
解决时间 2021-03-31 22:54
- 提问者网友:wodetian
- 2021-03-31 17:46
C++中 析构函数是用来释放内存,那么自定义的析构函数,能释放内存吗?
最佳答案
- 五星知识达人网友:由着我着迷
- 2021-03-31 18:03
就算是你自定义了析构函数,默认析构函数同样会存在,而且会执行。当类中有类对象成员时,首先调用的是自定义的析构函数,然后这个类对象成员资源的释放,就是由默认析构函数来释放的。因为指针不属于对象成员,因此默认析构函数不会管他,需手动释放指针的资源(主要是new)例class B{public:~B(){cout<<"B";}}; class A{public: B mb; ~A(){}}; void main(){ A ma;} 在类A中的析构函数什么也没做,也就是没有释放类成员mb的资源,但类B的析构函数仍执行了,这个类对象成员mb的资源释放,就是使用的类A的默认析构函数进行的。
全部回答
- 1楼网友:第四晚心情
- 2021-03-31 21:24
可以自定义析构函数,写上自己的逻辑就行。除了释放内存还能添加其他代码,
- 2楼网友:第四晚心情
- 2021-03-31 20:26
析构函数只是在对象被释放前“自动调用”的函数,它本身没有释放内存的功能。
- 3楼网友:逃夭
- 2021-03-31 19:59
默认的析构函数什么都不做的,如果要释放内存 需要你自己加上
析构函数就是在对象生命周期结束时自动调的最后一个函数,需要实现什么功能都由你自己控制追问默认的析构函数什么都不做?不会吧,书上说,这是用来释放对象的啊,程序结束时,会调用每一个对象的默认析构函数,难道这个函数什么都不做?追答如果你不写什么东西,那么它真的什么都不做 :)
这是用来释放对象的,这句话没错,它存在的原因就是释放,但是怎么释放,需要你来告诉它
你可以做这样一个测试,在构造函数中申请一段内存,然后不写析构函数,也就是用默认析构函数
在程序的其他地方把这个内存值保存起来
在定义对象生命周期结束后再调用这段内存,看是否会出问题,不出问题证明它没有被释放
:)追问我的意思是,默认析构函数,有它本身的功能吧?
那么我自定义一个析构函数,它还具有本身的功能吗?追答可以很确定的说 默认析构函数没有任何特殊的功能 它就是一个空函数
析构函数就是在对象生命周期结束时自动调的最后一个函数,需要实现什么功能都由你自己控制追问默认的析构函数什么都不做?不会吧,书上说,这是用来释放对象的啊,程序结束时,会调用每一个对象的默认析构函数,难道这个函数什么都不做?追答如果你不写什么东西,那么它真的什么都不做 :)
这是用来释放对象的,这句话没错,它存在的原因就是释放,但是怎么释放,需要你来告诉它
你可以做这样一个测试,在构造函数中申请一段内存,然后不写析构函数,也就是用默认析构函数
在程序的其他地方把这个内存值保存起来
在定义对象生命周期结束后再调用这段内存,看是否会出问题,不出问题证明它没有被释放
:)追问我的意思是,默认析构函数,有它本身的功能吧?
那么我自定义一个析构函数,它还具有本身的功能吗?追答可以很确定的说 默认析构函数没有任何特殊的功能 它就是一个空函数
- 4楼网友:夜余生
- 2021-03-31 19:02
系统自带的类的析构函数已经都做好了,你自己写的类的析构函数默认是空的,如果在类中开辟了一些堆空间来使用的话,最好检查你使用之后有没有释放掉,如果没有释放就要在析构函数中释放掉,不然容易造成内存浪费。追问程序结束时,会自动调用默认析构函数来释放对象是吧?
如果我们自定义了析构函数,程序结束时也会自动调用自定义析构函数是吧?
那么我们自定义的析构函数具有释放对象的功能么?
如果没有,那还叫析构函数么?追答系统默认的析构函数只会释放系统自己创建的一些内存空间。
如果你在类中用了new之类的在块堆开辟了新的空间,那么你必须在使用结束时候delete掉这部分空间,系统自带的析构函数不会帮你释放这一部分空间的。追问我的意思是,默认析构函数,有它本身的功能吧?
那么我自定义一个析构函数,它还具有本身的功能吗?
如果我们自定义了析构函数,程序结束时也会自动调用自定义析构函数是吧?
那么我们自定义的析构函数具有释放对象的功能么?
如果没有,那还叫析构函数么?追答系统默认的析构函数只会释放系统自己创建的一些内存空间。
如果你在类中用了new之类的在块堆开辟了新的空间,那么你必须在使用结束时候delete掉这部分空间,系统自带的析构函数不会帮你释放这一部分空间的。追问我的意思是,默认析构函数,有它本身的功能吧?
那么我自定义一个析构函数,它还具有本身的功能吗?
- 5楼网友:孤老序
- 2021-03-31 18:53
析构函数不是用来释放内存吧。程序不会显式调用析构函数啊,通过new操作符创建的对象,最后要通过delete操作符删除。
delete操作符会调用析构函数做一些工作,然后用operator delete释放内存。
delete操作符会调用析构函数做一些工作,然后用operator delete释放内存。
- 6楼网友:山有枢
- 2021-03-31 18:47
当然能了,你知道把要释放资源的语句, 放到析构函数里,那么当这个单位结束自己的寿命周期.比如:
{
myClass a;
{
myClass m;
m.init()
...
}
//走到这里 m已被回收,而a没有
}.
或者被delete
{
myClass *a=new myClass()
delete a;
}
就会自动运行到析构 函数哦
{
myClass a;
{
myClass m;
m.init()
...
}
//走到这里 m已被回收,而a没有
}.
或者被delete
{
myClass *a=new myClass()
delete a;
}
就会自动运行到析构 函数哦
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯