打印

指针问题

[复制链接]
2159|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yybj|  楼主 | 2013-1-27 15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在学习设计模式的时候,经常需要用到维护指针、维护内存资源的难题,感觉很头痛。
相信每个使用C++的程序员都会对内存维护这个问题头痛。
经常碰到的问题是:
1、一个成员函数中返回的堆中生成的对象,应该是由Client负责回收内存,还是应该由类
自身的Deconstructor负责回收内存?
2、Effective C++中 P62 说明是Client负责回收该指针所指向的内存,然后又提出了使用
诸如auto_ptr、sharp_ptr之类的“智能指针”取代传统的dumb pointer,在More  
Effective C++中,对“智能指针”进行了更为详细的剖析,得出的结论是,“智能指
针”并不完美。
3、在此,我想了解一下大家对“智能指针”的看法,这个东西使用范围是否很广?效果如
何?与传统指针之间的融合如何?

相关帖子

沙发
gxgclg| | 2013-1-27 16:17 | 只看该作者
谁分配的 谁负责释放
smart pointer方便写代码,不会因为漏释放而导致memory link

使用特权

评论回复
板凳
无冕之王| | 2013-1-27 16:33 | 只看该作者
1. 资源管理的复杂性是为提供更高的性能。当然复杂性和高性能之间应该适当平衡,满足项目要求就好。
2. 原生指针不能被智能指针替代,因为我们往往会用到第三方API和遗留系统的API。
3. 所有权问题。资源/指针所有权属于谁,谁就负责资源/指针的生老病死。正确划分所有权,这个设计问题。
4. 适当使用智能指针,可以简化代码,集中火力对付业务逻辑,而不是异常处理.遵循RAII.
5. 共享所有权时,使用基于引用计数的智能指针。
6. 没有放之四海而皆准的方案,具体问题具体分析。

使用特权

评论回复
地板
sinadz| | 2013-1-27 16:39 | 只看该作者
1 : 你可以回传smart pointer
2 : “智能指 针”并不完美,原始指针也不完美,c不完美,c++不完美,D不完美,java不完美,c#不完美,ruby
不完美,我想知道有什么是完美的?
如果没有技术是完美的,那么两相比较后,取缺点较少的,最适合你的来用就是了

3 : 应用范围很广,只要是跟资源管理扯上关系,在C++中他几乎都可以派上用场。其实smart pointer的
重点在于RAII的精神,既然你有读more effective和effective,那一定可以深刻体会到不靠RAII,
要在C++中写出exception safe的代码有多么的困难,程式肥大起来后更是让维护难度大增。和普通指标
的融合也很自然,只要用get或release就可以跟普通指标合作了

使用特权

评论回复
5
sinadz| | 2013-1-27 16:52 | 只看该作者
智能指针用的还是比较广泛的,免除了delete的麻烦

使用特权

评论回复
6
秋天落叶| | 2013-1-27 16:59 | 只看该作者
client调用factory获取指针 最好用智能指针,当然也可以用裸指针;
其实在自己的项目内部一般可以避免用factory获取heap指针;
当然具体要看自己的实践,RAII还是必须的,不管怎么样,保证内存不泄露就行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

2496

帖子

1

粉丝