智能指针和内存泄漏的问题

anuosix 2008-11-08 12:10:26
运行程序到最后弹出一对话框,只有四个字“内存不足”。
我察看了程序,只有一处我是用了普通指针,但是也进行了删除,是在vc对话框程序的oninitdialog()函数最后进行的删除(当然,定义是在其之前),但是删除的时候主要处理过程已经结束,出现这种情况是不是属于隐式泄漏,但是看资料中说只有一些大型服务程序运行时间长才会出现这种问题,不知道我这算不算?
另外,其实这个指针我就在程序最开始的时候用了一下,后来运行的代码中是没有用到它,这样在最后删除肯定不合理了,我想问的是如果把这个指针改成使用boost::shared_ptr的话,是不是我一旦不再使用这个指针,程序就能立刻作出响应,删除它呢,如果是这样的话,程序又是如何判断这个指针在后来会不用了呢,因为程序还没有执行到最后阿。

高手解答,谢谢!
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
anuosix 2008-11-08
  • 打赏
  • 举报
回复
哦!:)
谁申请谁释放这个听起来很有道理。我这个也算是谁申请谁释放了,但是就是申请了之后并不是全局都用,最初只是考虑以后可能进行扩展而写的,也就在类的其中一个函数中用了一下,避免这个问题,应该是在这个函数中申请对巴吧,这样就会在函数调用结束的时候释放掉了。用智能指针好一些吧,不用总想着delete,有时候容易忘!嗬嗬

另外,还是不太清楚到底什么时候用指针,现在用的也比较盲目,也不知道能不能提高效率
lijinfenghust 2008-11-08
  • 打赏
  • 举报
回复
1 是经验 (废话!!)
2 代码风格问题。比如内存谁申请,谁释放。(有人喜欢在一个函数里面申请一块区域,然后在
另外一个地方释放,我不赞同)。
3 集成化开发环境里面,写了new ,直接就写上delete 。然后在之间写代码,就是代码要对称写。
4.要了解相关的技能只是。比如 windows编程里面,申请一个画刷,申请一个画笔的,没调用destroyObject
的,那就有问题了。

只能想起这么多了。
anuosix 2008-11-08
  • 打赏
  • 举报
回复
那么,类似于隐式泄漏这样的错误怎么样来处理呢
太乙 2008-11-08
  • 打赏
  • 举报
回复
up~~~好困~!
lijinfenghust 2008-11-08
  • 打赏
  • 举报
回复
"是不是我一旦不再使用这个指针,程序就能立刻作出响应,删除它呢"
智能指针其实没那么聪明的。

智能指针不过是这样的 ,把你的指针包装成一个类。
然后比如你在函数中这么写了
void fun(int a)
{
auto_ptr<YourType> m_iteliPtr;
...
}
m_iteliPtr
首先要构造把 ,它内部的有个T*的成员变量 ,初始化为null;

然后因为这个对象分配在栈上,到函数结束的时候会析构把。
析构的时候 它会判断 指针后 调用 delete p;

这样就起到了自动销毁对象的作用。

可见,所谓智能指针,也得到这个智能指针对象的生存周期结束的时候才会销毁内存的。通过析构函数。
anuosix 2008-11-08
  • 打赏
  • 举报
回复
我把那个用普通指针的变量去掉了,剩下的要么不用指针,要么用boost::shared_ptr,但是数据量大了还是会出现内存不足,这样该怎么办,应该是真的内存不够用了吧,如何处理这种情况

就是在运行中间会弹出对话框“内存不足”
用的是visual c++ 2005

64,685

社区成员

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

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