C++ dll全局指针变量怎么释放内存,什么时候释放内存

Sephoenix 2009-09-01 11:06:41
rt,C++ dll全局指针变量怎么释放内存,什么时候释放内存?
网上有说用智能指针来管理内存,可行吗?怎么做?
...全文
968 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2009-09-01
  • 打赏
  • 举报
回复
全局的,你可以不释放,如果只是内存而已。
mengde007 2009-09-01
  • 打赏
  • 举报
回复
智能指针最好别用,防止传递时生存期出现错误;最好自己写个计数器;或者用COM里面的IUnknown接口;
neohope 2009-09-01
  • 打赏
  • 举报
回复
卸载后,就释放啦
Gary@Tokyo 2009-09-01
  • 打赏
  • 举报
回复
DLL中释放,没有考虑过这个问题,看看

不过智能指针确实可以,看看高手的其他方法
编程-鸟人-_-- 2009-09-01
  • 打赏
  • 举报
回复
既然是dll,就要处理引用计数问题。当计数为0的时候,释放,就像COM。
Sephoenix 2009-09-01
  • 打赏
  • 举报
回复
不管怎么说还是要谢谢各位的回答。我第一次写dll,写的乱糟糟的。
Sephoenix 2009-09-01
  • 打赏
  • 举报
回复
糊里糊涂改好了
我写的是mfc dll
原来我把指针放在类里面,然后再类里面的多个函数内用到这个指针,在c#中调用这些函数老是报各种各样的错。

今天把那些变量全写到类外面去了,所有要用的函数也写到外面去。然后,就好了。

为什么?
难道我类里面的变量,类的函数还不能调用吗?
donkey301 2009-09-01
  • 打赏
  • 举报
回复
我觉得最好还是不要用全局指针。
我看你有戏 2009-09-01
  • 打赏
  • 举报
回复
dllmain里面有个标志的吧,如果dll被卸载的时候,会收到这个标志的,你在那里面delete好了
Sephoenix 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 acrobatyuer 的回复:]
既然是全局的干嘛要释放呢!不然定义全局不就没有意义了吗?
[/Quote]
其实我也不知道,只是调试的时候发现释放掉内存会好一点。
我是写的c++的dll(主要是做些音乐播放、音乐处理之类的事情),然后在c#里调用,如果不释放就完全错误,我用计时器释放内存,还是会在放完歌的时候出现错误。

我也只是猜测是因为内存出现的错误,也可能是其他方面。不过肯定是全局指针变量这里出现了问题
taodm 2009-09-01
  • 打赏
  • 举报
回复
建议去windows版问,那边对这个话题比较清楚。
dll入口函数里有退出处理机制,应该加在那儿。
acrobatyuer 2009-09-01
  • 打赏
  • 举报
回复
既然是全局的干嘛要释放呢!不然定义全局不就没有意义了吗?
bfzhao 2009-09-01
  • 打赏
  • 举报
回复 1
全局变量,无论是什么,都有C运行库负责初始化和释放。但是由于这个变量的顺序是不确定的,不要依赖于这样的机制。在dll中也是如此,但是发生在加载dll之后,进入dllmain之前。
至于智能指针,不是简单地学习其语法,而是了解基于RAII的资源管理机制。建议google "C++ in action",有专门一章论述

64,281

社区成员

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

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