析构函数究竟在什么情况下是必须的?

成都-hero 2010-05-15 11:43:42
类的析构函数在怎样的情况下需要在类的定义中作显示的声明呢,就想下面这样
class test
{
private:
int a;
int b;
public;
test()
~test()
}
...全文
419 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
song1177 2010-05-16
  • 打赏
  • 举报
回复
申请了资源的时候。为了防止资源泄漏就在析构函数里增加释放资源的语句。
RHuniSoft 2010-05-15
  • 打赏
  • 举报
回复
当你的成员函数里有用到动态内存申请的时候,一般用到了malloc remalloc new等用于申请动态内存的函数时,就需要你手动释放这些申请的内存,就需要在析构函数里free delete掉了,没有用到动态申请内存的,如果不写析构函数,不会影响你的程序,编译器会调用默认的析构函数。。。。
cattycat 2010-05-15
  • 打赏
  • 举报
回复
你的这种情况不需要析构函数,一般需要手动释放内存和一些资源的时候需要析构函数
liutengfeigo 2010-05-15
  • 打赏
  • 举报
回复
UP.
maoxing63570 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 we_sky2008 的回复:]
在构造函数里动态申请资源的话
就应该在析构函数里将其释放
正解
AlanBruce 2010-05-15
  • 打赏
  • 举报
回复
如果你的对象中存在一个堆上的内存分配,但是不是在其他地方释放的

那么你必须在对象析构时显示的释放堆上的内存。。。
we_sky2008 2010-05-15
  • 打赏
  • 举报
回复
在构造函数里动态申请资源的话
就应该在析构函数里将其释放
wuyu637 2010-05-15
  • 打赏
  • 举报
回复
当你的类需要你手动的回收一些资源,或者改变一些必要的状态的时候,析构函数就是必须的。

比如你需要释放内存。或者改变其他类中 对这个类的引用计数。之类的事情。


一般情况下,比如你的例子,比较简单的类,是可以不写的。


当然写了也可以,
pengzhixi 2010-05-15
  • 打赏
  • 举报
回复
有一个规则:永远定义一个析构函数是不会错的。
yanran_hill 2010-05-15
  • 打赏
  • 举报
回复
析构函数,有的时候,是为了实现某种"必要的"处理,未必就是为了释放内存,比如:
1 在一些常见的CFile,CSocket类中,析构函数将关闭文件和socket
2 在auto_ptr中,对引用计数进行处理
3 比如这样的类定义和使用:

template <class T>
class LockGuard
{
T & m_locker;
public:
LockGuard(T & locker) : m_locker(locker){m_locker.Lock();}
~LockGuard(){m_locker.Unlock();}
};
int thread_routin()
{
CRecurMutex mut;
LockGuard<CRecurMutex > locker(mut)'
return 0;
}
feidaozouren 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyu637 的回复:]
当你的类需要你手动的回收一些资源,或者改变一些必要的状态的时候,析构函数就是必须的。

比如你需要释放内存。或者改变其他类中 对这个类的引用计数。之类的事情。


一般情况下,比如你的例子,比较简单的类,是可以不写的。


当然写了也可以,
[/Quote]支持
饭fan有引力 2010-05-15
  • 打赏
  • 举报
回复
建议就是每次都写析构函数的习惯是很好的,不要嫌麻烦
yangyunzhao 2010-05-15
  • 打赏
  • 举报
回复
析构函数永远都是必须的,区别在于是否你显式的写出来。

对了,再说一句,析构函数和普通函数区别不大,只有一点:delete一个指针或者出某个变量生存空间的时候会自动调用。
SimonYeung 2010-05-15
  • 打赏
  • 举报
回复
如果有对内存申请资源
那么销毁对象的时候必须释放资源
azurezk 2010-05-15
  • 打赏
  • 举报
回复
学习中

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧