社区
模式及实现
帖子详情
请问单例模式最后怎样释放内存?
lhbgyl
2005-12-06 09:45:16
我在程序中使用了单例模式,我怕内存泄漏,就在主程序中Instance一个单例类的对象,然后在程序退出的时候delete它,但是经常出现NULL Pointer Assignment 错误,如果把这两行语句删除,就不会有错误,但是在程序的其他地方只有对这个单例类对象Instance操作,没有delete操作,请教各位高手,这样是不是导致内存泄漏?如何来处理才是正确的。
...全文
821
12
打赏
收藏
请问单例模式最后怎样释放内存?
我在程序中使用了单例模式,我怕内存泄漏,就在主程序中Instance一个单例类的对象,然后在程序退出的时候delete它,但是经常出现NULL Pointer Assignment 错误,如果把这两行语句删除,就不会有错误,但是在程序的其他地方只有对这个单例类对象Instance操作,没有delete操作,请教各位高手,这样是不是导致内存泄漏?如何来处理才是正确的。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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.
快速学会关键路径、最早开始时间和最晚开始时间的计算
计算关键路径、最早开始时间和最晚开始时间
开始屏幕的缺点
开始屏幕的缺点: 虽然显示区域更大,显示区域更多,但用户大部分时间都是在传统桌面下,要快速寻找某个应用或设置的话需要先按下 Windows 键跳回开始屏幕,如果没有在常使用区域的话,之后还需要滚动鼠标或去拖动那极不人性的横向滚动条,还是稍显繁琐。相信很多人在 Win 8 中还是依旧将固定任务栏作为首选,也或许 360 找回的“开始菜单”会有市场。(所以这个时候要多用搜索,Win 8 的搜索功能比
第十一节:Activiti6.0——定时器开始事件、消息开始事件和错误开始事件介绍
一、概述 介绍: 在activiti中,事件按位置分可以有:开始事件、中间事件、边界时间、结束事件;按事件的特性区分有:捕获事件和抛出事件。除了事件,还有各种事件定义,常用的有:定时器事件定义、错误事件定义、信号事件定义、消息事件定义 、取消事件定义、补偿事件定义等。事件和事件定义可以进行组合,成为特定的事件。 此刻: 本文主要讲四种开始事件 无指定开始事件:不为开始事件指定任何的触发条件的事件...
表示自己从头开始的句子_一切从头开始唯美句子,致自己重新开始的句子
以下就是乌迪尔文学网提供的关于《一切从头开始唯美句子,致自己重新开始的句子》的相关内容,引起了很多人的共鸣,希望对你的生活会有帮助!1、前行途中不论多么风雨无阻,都避免不了突遇的红灯,尽管你不得不停下,也是机会可以重新出发。2、人生只有走出来的美丽,没有等出来的辉煌。3、能够检讨反思,就等于有了重新开始的基础,这就是人成熟的过程。4、下定决心一定要,才是成功的关键。5、不要害怕做错什么,即使错了,...
java获取当天的开始时间,当前周的开始时间
在程序里面要获取当前的开始时间和结束时间,以及当前天所在的周的开始时间和结束时间,在这个地方记录一下。 当天开始时间: Java代码 Calendar currentDate = new GregorianCalendar(); currentDate.set(Calendar.HOUR_OF_DAY, 0); curr
模式及实现
5,529
社区成员
4,167
社区内容
发帖
与我相关
我的任务
模式及实现
C/C++ 模式及实现
复制链接
扫一扫
分享
社区描述
C/C++ 模式及实现
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章