请问单例模式最后怎样释放内存?

lhbgyl 2005-12-06 09:45:16
我在程序中使用了单例模式,我怕内存泄漏,就在主程序中Instance一个单例类的对象,然后在程序退出的时候delete它,但是经常出现NULL Pointer Assignment 错误,如果把这两行语句删除,就不会有错误,但是在程序的其他地方只有对这个单例类对象Instance操作,没有delete操作,请教各位高手,这样是不是导致内存泄漏?如何来处理才是正确的。
...全文
762 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinall 2005-12-07
  • 打赏
  • 举报
回复
用boost的shared_ptr来管理吧。
或者stl的auto_ptr来管理。
csucdl 2005-12-06
  • 打赏
  • 举报
回复
楼上的怎讲
lhbgyl 2005-12-06
  • 打赏
  • 举报
回复
我是在dos下用borlandc++3.1做的,不知道如何看内存是否泄漏。
lhbgyl 2005-12-06
  • 打赏
  • 举报
回复
对,我的写法与《设计模式-可服用面向对象基础》的写法相同,和你的写法不同,没有写delete函数,我说的delete是与new对应的那个delete
快乐鹦鹉 2005-12-06
  • 打赏
  • 举报
回复
就在主程序中Instance一个单例类的对象
==
首先,你的单实例对象是什么类型的?Instance操作都做了什么?
其次,是否有泄漏,你可以在调试状态下看有没有泄漏报告。
另外,对于生命期与主线程相同的对象,从结果上看,delete并非必要,因为即使因为没有delete而泄漏,也不要紧,因为程序退出,系统会回收所有资源,包括没有delete的。
内存泄漏最大的威胁是在运行过程中产生的泄漏,如在循环等过程中反复申请资源,如果不及时释放,将会内存耗尽。
lhbgyl 2005-12-06
  • 打赏
  • 举报
回复
为什么会自己释放了?是不是析构函数做的,在堆中创建的对象,它的析构函数也会自己调用吗?
fiftymetre 2005-12-06
  • 打赏
  • 举报
回复
你的Instance和Delete函数是怎么写的?是这样吗?

Singleton *Instance()
{
if (NULL == m_pInstance)
{
m_pInstance = new Singleton();
}
return m_pInstance;
}

void Delete()
{
if (NULL != m_pInstance)
{
delete m_pInstance;
m_pInstance = NULL;
}
}

最好把你的代码贴出来看看
junguo 2005-12-06
  • 打赏
  • 举报
回复
程序退出后,自然就不从在内存泄露了!但你在释放Instance的时候,应该先对Instance进行一下判断,看它是否为空,在做释放.
xingtian713 2005-12-06
  • 打赏
  • 举报
回复
Singleton模式下的实例,从实用角度上来说,是允许有一定的泄漏的,因为他的释放时机就是整个程序退出时机。
csucdl 2005-12-06
  • 打赏
  • 举报
回复
估计楼主在其他地方改变了返回的单件对象指针的值
你可以单步调试跟踪一下
单件模式存在着thread unsafe 具体解决方法这里有讨论
http://dev.csdn.net/develop/article/65/65642.shtm
fixopen 2005-12-06
  • 打赏
  • 举报
回复
如果你的对象确实是Singleton,那么你就不需要担心释放问题。
hjunxu 2005-12-06
  • 打赏
  • 举报
回复
但构建也有不同的实现方法的,你如果放在堆里(一般用new分配的),就需要delete.

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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