找回密码
 FreeOZ用户注册
查看: 3568|回复: 28
打印 上一主题 下一主题

[论坛技术] C++的指针处理

[复制链接]
跳转到指定楼层
1#
发表于 7-3-2009 23:42:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
C++的指针什么时候new,什么时候delete确实有点困惑。
比如-
1。 是一定要坚持,谁new谁delete的原则马? 在constructor中new, 在destructor 中delete。
2。 如果如果1所说,那么如果一个method 返回一个指针, 这个指针怎么处理?
3。 都用auto_ptr来简化处理好马?有什么局限马?
4。 好像是看了哪里,说是尽量用指针,而不是reference, 有什么理由马?
回复  

使用道具 举报

2#
发表于 8-3-2009 01:07:51 | 只看该作者
1.  有new的就要有delete。  constructor里面new, 也不一定要在destructor中delete吧。 但是你destruc结束t的时候得要释放内存就行。
2.  如果函数里面new了东西,以指针传递出去, 可以在外面delete的
3. 不懂
4. 我怎么看的是相反的: 在函数参数传递的时候。
回复  

使用道具 举报

3#
发表于 8-3-2009 01:40:23 | 只看该作者
1.不必,但是最好管理好在什么时机new,delete
2.写代码时候要考虑好对象的生存期,在生存期内通过指针访问对象ok
3.记得c++标准的auto_ptr有局限,一次只有一个auto_ptr指向对象,传递完auto_ptr就失效了。如果用boost提供的会好用很多。
4.不可能,指针和reference各有作用,reference更oo些,其实也是指针的一种grammar sugar。
回复  

使用道具 举报

4#
发表于 8-3-2009 21:02:29 | 只看该作者
1。 是一定要坚持,谁new谁delete的原则马? 在constructor中new, 在destructor 中delete。
--- 不一定, C++给你所有的灵活性,没有限制的,内存管理的策略更是形形色色,根据具体的场合而灵活变化。
2。 如果如果1所说,那么如果一个method 返回一个指针, 这个指针怎么处理?
---要看方法的约定,这是设计上的决策,比如COM/DCOM中的连接点的设计就是由调用方负责管理内存,一些POSIX的库函数也是由调用方负责分配内存。
3。 都用auto_ptr来简化处理好马?有什么局限马?
---不好,如果都应该用auto_ptr的话,auto_ptr早就被集成进语言里了, 这样的东西大家一般称为Java.
4。 好像是看了哪里,说是尽量用指针,而不是reference, 有什么理由马?
---是尽量用reference,但是也有例外,比如可以有空指针,但是不能有空的reference。基本上来说,reference是一种安全指针,本质上是相同的东西。 有人问BJ为什了this被设计为指针而不设计为reference时,他回答:设计this时,reference还没有被设计出来。 所以,应该优先用哪个一目了然。
回复  

使用道具 举报

5#
发表于 8-3-2009 21:59:29 | 只看该作者
我的答案同以上3位
回复  

使用道具 举报

6#
发表于 9-3-2009 11:54:26 | 只看该作者
唉,当年曾经想过自己开发C++库,实现C++垃圾自动回收机制,可惜最终失败了
回复  

使用道具 举报

7#
发表于 9-3-2009 12:46:37 | 只看该作者

回复 #6 beysup 的帖子

c和c++的gc library也不少啊,为什么要自己写

而且大部分时间用用智能指针就足够了,gc只是个辅助的东西。 而且很多重要资源的泄露(文件句柄,网络和数据库连接等)是gc无法解决得了的。
回复  

使用道具 举报

8#
发表于 9-3-2009 17:38:58 | 只看该作者
我一般自己写指针回收,Ref,DeRef,就是所谓智能指针吧
回复  

使用道具 举报

9#
发表于 9-3-2009 17:47:30 | 只看该作者

回复 #8 蒙面超人 的帖子

boost::shared_ptr  or loki智能指针
回复  

使用道具 举报

10#
 楼主| 发表于 9-3-2009 23:35:24 | 只看该作者
有什么C++的方法论之类的书推荐一下马?
回复  

使用道具 举报

11#
发表于 9-3-2009 23:43:53 | 只看该作者

回复 #10 GPS 的帖子

很多人推荐这一本,不过我没看过:
《C++ Primer》
http://www.google.com/search?q=C%2B%2B+primer
回复  

使用道具 举报

12#
发表于 9-3-2009 23:49:36 | 只看该作者

回复 #11 ubuntuhk 的帖子

C++ Primer的确不错,不过那个厚度也好意思称为Primer的确是有点不害臊  如果能坚持看一遍这本书将会收获很大。
回复  

使用道具 举报

13#
发表于 9-3-2009 23:54:57 | 只看该作者

回复 #12 coredump 的帖子

这个名字比那种《24小时精通xx》之类的强吧。
回复  

使用道具 举报

14#
发表于 10-3-2009 11:42:36 | 只看该作者
有没有把B.S.的《The C++ Programming Language Special Edition》一页页从头看到尾的
回复  

使用道具 举报

15#
发表于 10-3-2009 12:16:59 | 只看该作者

回复 #14 beysup 的帖子

那是字典,有时间看看也是有收获的。

我建议先看C++ Primer 知其然, 然后结合 B.S.的C++ Design & Revolution 知其所以然。

如果还有继续探索的精神,就看C++ Object Model, 知其所以所以然
回复  

使用道具 举报

16#
发表于 10-3-2009 17:13:51 | 只看该作者

回复 #15 coredump 的帖子

太强,在如今Java和.NET横行的环境下,有人静下心来钻研C++的,令人佩服
回复  

使用道具 举报

17#
 楼主| 发表于 10-3-2009 17:25:15 | 只看该作者
谢谢大家建议啊。 先去找本C++ Primer 补一补。
回复  

使用道具 举报

18#
 楼主| 发表于 10-3-2009 17:29:18 | 只看该作者



等我把coredump等各位推荐的书都看了,也来这里答疑。呵呵呵。

评分

参与人数 1威望 +30 收起 理由
ubuntuhk + 30 赞分享精神~~

查看全部评分

回复  

使用道具 举报

19#
发表于 10-3-2009 18:13:06 | 只看该作者
澳洲大学最近又把C++捡起来了,最近两三年几乎不开,估计是又缺了 C++还是很有潜力的

原帖由 ubuntuhk 于 10-3-2009 18:13 发表
太强,在如今Java和.NET横行的环境下,有人静下心来钻研C++的,令人佩服
回复  

使用道具 举报

20#
发表于 10-3-2009 18:13:50 | 只看该作者

回复 #19 beysup 的帖子

我就是把C++当作有类的C语言来用
回复  

使用道具 举报

21#
 楼主| 发表于 10-3-2009 19:00:13 | 只看该作者
有什么办法可以检测程序是否有resource leak呢? 比如,用什么软件可以对比内存变化之类的。
回复  

使用道具 举报

22#
发表于 10-3-2009 19:47:53 | 只看该作者

回复 #21 GPS 的帖子

WINDOWS:
Rational Purify Plus套件 包括Coverage(测量代码覆盖度), Quatify(检测性能瓶颈) 和Purify(检测内存泄漏)
Intel V-Tune
其它的如bounchcheck之类的。

Linux/Unix:
Ration Purify Plus UNIX版, Intel V-Tune Linux版

免费的: Gprof, valgrind,SYSTEMTAP  (Linux),  D-Trace (Solaris)
回复  

使用道具 举报

23#
发表于 10-3-2009 19:49:11 | 只看该作者
原帖由 ubuntuhk 于 10-3-2009 17:13 发表 太强,在如今Java和.NET横行的环境下,有人静下心来钻研C++的,令人佩服

用来混饭吃
回复  

使用道具 举报

24#
发表于 10-3-2009 20:47:50 | 只看该作者
我在看Thinking in C++ Volume 2, 2nd edition, 觉得还不错呀。
那个C++ Primer 感觉好简单,有点面面的感觉。

编程语言这种东西, 不实际编编做做, 实在是学了也很快忘记了。
回复  

使用道具 举报

25#
发表于 11-3-2009 12:02:07 | 只看该作者

回复 #24 migao21 的帖子

c++不是一本书可以全部搞定的,一本语法书是肯定的,还要有些深入的比如深度探索C++对象模型(Inside The C++ Object Model),还有STL的,还有平台相关的,比较多。
回复  

使用道具 举报

26#
发表于 18-3-2009 03:38:22 | 只看该作者
原帖由 migao21 于 10-3-2009 21:47 发表
我在看Thinking in C++ Volume 2, 2nd edition, 觉得还不错呀。
那个C++ Primer 感觉好简单,有点面面的感觉。

编程语言这种东西, 不实际编编做做, 实在是学了也很快忘记了。


C++ primer 可以算是最经典的了 lippman 很强的 其实 primer 真正看完了 理解了 C++ 也就差不多了

好好看看吧

注意是 C++ primer 而不是 C++ primer plus ~
回复  

使用道具 举报

27#
发表于 18-3-2009 03:40:42 | 只看该作者
原帖由 coredump 于 10-3-2009 13:16 发表
那是字典,有时间看看也是有收获的。

我建议先看C++ Primer 知其然, 然后结合 B.S.的C++ Design & Revolution 知其所以然。

如果还有继续探索的精神,就看C++ Object Model, 知其所以所以然


是 Evolution吧  呵呵

我记得最清楚的就是  解释为什么 this是一个指针而不是引用: 因为发明 this 这个东西的时候 还没有引用~
回复  

使用道具 举报

28#
发表于 18-3-2009 03:42:47 | 只看该作者
原帖由 GPS 于 8-3-2009 00:42 发表
C++的指针什么时候new,什么时候delete确实有点困惑。
比如-
1。 是一定要坚持,谁new谁delete的原则马? 在constructor中new, 在destructor 中delete。
2。 如果如果1所说,那么如果一个method 返回一个指针 ...


第 4点 有这个说法吗?

其实指针和引用基本上是一样的, reference 也就是作为参数的时候能够防止 类似空指针的情况

D&E 里说 之所以引入 reference, 主要是在操作符重载的时候做连续的操作
回复  

使用道具 举报

29#
发表于 18-3-2009 11:40:45 | 只看该作者
使用 std::tr1::shared_ptr 可以不用自己delete,auto_ptr就不要用了。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 27-7-2026 23:57 , Processed in 0.048509 second(s), 46 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表