关于C++指针。要不要手动删除?

liuchunshanyj 2011-02-23 10:58:54
今天在单位跑一个程序。 发现内存占用不断增加。 同事看了下说是调用一个函数里面有个指针内存泄漏。

要手动delete 一下。 果然好了。


但是平时用指针 也没有去删除呀 。好像没问题。

是不是在调用别的函数的时候用完指针要记得删除

而主函数不需要。C++ 会自动释放?
...全文
943 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
浅行 2011-02-24
  • 打赏
  • 举报
回复
以前你的运行正常,可能是需要的空间小,还没到完蛋的地步
程序运行正常,并不说明你的程序一定是健康的,保持良好的编程习惯可减少此类bug
xiaozhuhaoa 2011-02-24
  • 打赏
  • 举报
回复
new分配的都需要要delete
direction917 2011-02-24
  • 打赏
  • 举报
回复
new 出来的是堆的,要删。
至于只能指针,学习了
modaoshi3002 2011-02-24
  • 打赏
  • 举报
回复
new出来的内存,必须delete,这也是一个编程的好习惯。
但实际上这样做还是不安全的,
比如你new出来之后,在delete之前,发生了异常,那么delete就运行不到。

解决办法是如楼上各位所说,使用智能指针,
它在构造时获取指针,在析构函数中保证了delete指针。

stl中有auto_ptr, 但因为无法复制等问题,已经过时了,
现在一般使用boost::shared_ptr,
这是最强的智能指针,已经进入了最新的标准库
也可以如下方式使用:
std::tr1::shared_ptr
mstlq 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 boyhailong 的回复:]
引用 6 楼 fanlehai 的回复:

new delete 是配对使用的,如果实在不想的话,用auto_ptr吧

auto_pt是boost的玩意?
[/Quote]
stl就有
chengzhe 2011-02-24
  • 打赏
  • 举报
回复
贴代码
mtj530 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 mymugua 的回复:]
new了就delete,单纯的定义一个指针是不需要的
[/Quote]
单纯的最后面没用了的话赋值为NULL.
myMugua 2011-02-24
  • 打赏
  • 举报
回复
new了就delete,单纯的定义一个指针是不需要的
食财物权情性 2011-02-24
  • 打赏
  • 举报
回复
auto_ptr就是c++的
还是用boost的shared_ptr吧
xengine-qyt 2011-02-24
  • 打赏
  • 举报
回复
申请了空间才需要释放,没申请就不需要。
程序关闭后系统才会自动给你回收垃圾资源!
pstrunner 2011-02-24
  • 打赏
  • 举报
回复
主函数退出时,自然也就被OS回收内存啦,而不是C++自动释放的。

[Quote=引用楼主 liuchunshanyj 的回复:]
今天在单位跑一个程序。 发现内存占用不断增加。 同事看了下说是调用一个函数里面有个指针内存泄漏。

要手动delete 一下。 果然好了。


但是平时用指针 也没有去删除呀 。好像没问题。

是不是在调用别的函数的时候用完指针要记得删除

而主函数不需要。C++ 会自动释放?
[/Quote]
GARY 2011-02-24
  • 打赏
  • 举报
回复
动态申请(new)的要手动delete
int *pi = new int;
// use pi
delete pi;

7楼:
auto_pt是boost的玩意?

auto_ptr就是c++标准库的内容吧。
TimZhuFaith 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 boyhailong 的回复:]
引用 6 楼 fanlehai 的回复:

new delete 是配对使用的,如果实在不想的话,用auto_ptr吧

auto_pt是boost的玩意?
[/Quote]
是吗
欣客 2011-02-24
  • 打赏
  • 举报
回复
如果使用了new 就要配套delete .
ydqqk177 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fanlehai 的回复:]

new delete 是配对使用的,如果实在不想的话,用auto_ptr吧
[/Quote]

auto_ptr似乎已被新标准贬斥
推荐shared_ptr
yhwxxx 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 defonds 的回复:]

配对使用比较稳当
[/Quote]
一定要配对使用,提前返回的情况更要注意
Defonds 2011-02-24
  • 打赏
  • 举报
回复
配对使用比较稳当
xiaolomg 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fanlehai 的回复:]

new delete 是配对使用的,如果实在不想的话,用auto_ptr吧
[/Quote]
auto_pt是boost的玩意?
Learn-anything 2011-02-24
  • 打赏
  • 举报
回复
new delete 是配对使用的,如果实在不想的话,用auto_ptr吧
June_Xiao 2011-02-24
  • 打赏
  • 举报
回复
可以使用SmartPtr
加载更多回复(11)

64,684

社区成员

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

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