关于要不要delete指针的问题

wjjll123 2013-08-09 02:00:36
有一个全局的指针char* c = NULL;

然后在函数里面new了一个指针
char* cc = new char;
c = cc;

请问这个指针c需要在程序关闭之前delete掉吗?
指针cc是肯定不能delete的。因为别的地方还需要调用这个c
...全文
246 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-08-09
  • 打赏
  • 举报
回复
引用 11 楼 lin5161678 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 进程退出时,操作系统会将其所有new过的内存的对象全部自动delelte的。
应该自己做的事情就自己做 不应该依赖操作系统回收 也不应该给别人灌输可以依赖操作系统回收 这样的观念[/quote] 不要企图优雅的结束(因为这是不可能办到的) 而要在烂的不能再烂的摊子上也能重整河山!
stereoMatching 2013-08-09
  • 打赏
  • 举报
回复
Herb Sutter--Smart pointers: No delete http://herbsutter.com/elements-of-modern-c-style/ 这些建议来自全世界最优秀的c++ gurus 我们应该向最好的学习,不要再继续停身边“大牛”建议 使用"c coding standard"或是10年前的"c++ coding standard了"
引用
Don't use C coding standards (even if slightly modified for C++) and don't use ten-year-old C++ coding standards (even if good for their time). C++ isn't (just) C and Standard C++ is not (just) pre-standard C++.
http://www.stroustrup.com/bs_faq2.html#coding-standard
lin5161678 2013-08-09
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
进程退出时,操作系统会将其所有new过的内存的对象全部自动delelte的。
应该自己做的事情就自己做 不应该依赖操作系统回收 也不应该给别人灌输可以依赖操作系统回收 这样的观念
Sniper_Pan 2013-08-09
  • 打赏
  • 举报
回复
程序数据可存储在堆和栈中,栈中通常为内部类型如int等使用,而堆通常为手动new数据使用。 代码中new char的内存分配在堆中,并以cc指向,因此,建议在退出程序前
delete cc;
cc = NULL;
以避免内存泄露。至于c由于是内部类型,因此无需手动delete,程序会自动释放该内存。
xiaohuh421 2013-08-09
  • 打赏
  • 举报
回复
引用 6 楼 wjjll123 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 进程退出时,操作系统会将其所有new过的内存的对象全部自动delelte的。
本人有点强迫症。new完了不delete总觉得程序会有内存泄露。。。哎 [/quote] 强迫证也不是你这样强迫的撒, new后一定要delete这是必须的, 至少在思想上一定要这么想, 虽然程序退出后会释放程序申请的全部内存, 但万一改了设计, 申请的地方被调用了两次以上, 那就泄漏了. new后何时delete, 那才是需要考虑的问题.
stereoMatching 2013-08-09
  • 打赏
  • 举报
回复
please use smart pointer

std::unique_ptr<T> A(new T);
or

std::shared_ptr<T> A(new T);
shared_ptr is more expensive than uniuqe_ptr, prefer unique_ptr first if you don't need the flexibility of shader_ptr
max_min_ 2013-08-09
  • 打赏
  • 举报
回复
引用 5 楼 wjjll123 的回复:
[quote=引用 3 楼 max_min_ 的回复:]

 程序都退出了 还怎么用c? ,都已经结束进程啦!

系统就已经回收了你整个程序的内存空间了!

还有 c = cc ;之后, 指向的是同片内存拉!

你释放其中一个,另外一个也就释放了的!
引用 2 楼 nice_cxf 的回复:
[quote=引用 楼主 wjjll123 的回复:] 有一个全局的指针char* c = NULL; 然后在函数里面new了一个指针 char* cc = new char; c = cc; 请问这个指针c需要在程序关闭之前delete掉吗? 指针cc是肯定不能delete的。因为别的地方还需要调用这个c
程序都关闭了,还有地方调用? 如果这个函数多次调用会导致内存泄漏,代码不是这样写的。。。。[/quote] 我的意思是不能在new完了cc之后立刻delete。 而且本人有点强迫症。new完了不delete总觉得程序会有内存泄露。。。哎[/quote] 小代码。自己玩玩不delete 也没事的! 不过最好还是及时delete,是个好习惯! 用完就释放!
wjjll123 2013-08-09
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
进程退出时,操作系统会将其所有new过的内存的对象全部自动delelte的。
本人有点强迫症。new完了不delete总觉得程序会有内存泄露。。。哎
wjjll123 2013-08-09
  • 打赏
  • 举报
回复
引用 3 楼 max_min_ 的回复:

 程序都退出了 还怎么用c? ,都已经结束进程啦!

系统就已经回收了你整个程序的内存空间了!

还有 c = cc ;之后, 指向的是同片内存拉!

你释放其中一个,另外一个也就释放了的!
引用 2 楼 nice_cxf 的回复:
[quote=引用 楼主 wjjll123 的回复:] 有一个全局的指针char* c = NULL; 然后在函数里面new了一个指针 char* cc = new char; c = cc; 请问这个指针c需要在程序关闭之前delete掉吗? 指针cc是肯定不能delete的。因为别的地方还需要调用这个c
程序都关闭了,还有地方调用? 如果这个函数多次调用会导致内存泄漏,代码不是这样写的。。。。[/quote] 我的意思是不能在new完了cc之后立刻delete。 而且本人有点强迫症。new完了不delete总觉得程序会有内存泄露。。。哎
wjjll123 2013-08-09
  • 打赏
  • 举报
回复
引用 2 楼 nice_cxf 的回复:
[quote=引用 楼主 wjjll123 的回复:] 有一个全局的指针char* c = NULL; 然后在函数里面new了一个指针 char* cc = new char; c = cc; 请问这个指针c需要在程序关闭之前delete掉吗? 指针cc是肯定不能delete的。因为别的地方还需要调用这个c
程序都关闭了,还有地方调用? 如果这个函数多次调用会导致内存泄漏,代码不是这样写的。。。。[/quote] 我的意思是不能在new完了cc之后立刻delete。
max_min_ 2013-08-09
  • 打赏
  • 举报
回复

 程序都退出了 还怎么用c? ,都已经结束进程啦!

系统就已经回收了你整个程序的内存空间了!

还有 c = cc ;之后, 指向的是同片内存拉!

你释放其中一个,另外一个也就释放了的!
nice_cxf 2013-08-09
  • 打赏
  • 举报
回复
引用 楼主 wjjll123 的回复:
有一个全局的指针char* c = NULL; 然后在函数里面new了一个指针 char* cc = new char; c = cc; 请问这个指针c需要在程序关闭之前delete掉吗? 指针cc是肯定不能delete的。因为别的地方还需要调用这个c
程序都关闭了,还有地方调用? 如果这个函数多次调用会导致内存泄漏,代码不是这样写的。。。。
赵4老师 2013-08-09
  • 打赏
  • 举报
回复
进程退出时,操作系统会将其所有new过的内存的对象全部自动delelte的。

65,210

社区成员

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

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