由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++的smart pointer注定是个二流的东西
相关主题
琢磨了一下c++ smart pointer,发现不能到处用怎么准备一些hardcore C++的interview (转载)
什么时候使用c++ smart pointer?function pointer 和 call-back function 有什么区别?
不如各位高手挑个专题讲讲C++11吧is smart_ptr really that good?
about STL functor and function pointersc++ 里用到pointer 的地方我们尽可能用smart pointer吗?
C++ STL 的问题C++ most vexing parse到底怎么回事?
一个Quant Developer的C++面试题difference between: char** p and char*p[] ??
C++的很多library到底是趋于集中,还是各个公司独自开发,各立山头C++ pointer problem
大家要学习C++11啊, 我觉得C++11很多FEATURE,绝对不输JAVA.问个C++中重复删除指针的问题
相关话题的讨论汇总
话题: pointer话题: smart话题: c++话题: raii话题: 指针
进入Programming版参与讨论
1 (共1页)
g****u
发帖数: 252
1
如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.
l*********s
发帖数: 5409
2
isn't RAII the same idea as smart pointer?
g****u
发帖数: 252
3
smart pointer龌龊的地方是在拷贝的时候发生的一系列说不清道不明的事情. RAII本
身是反拷贝的.

【在 l*********s 的大作中提到】
: isn't RAII the same idea as smart pointer?
t****t
发帖数: 6806
4
smart pointer不是为了给猴子用的....

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

g****u
发帖数: 252
5
大部分程序员在编程这件事上都是猴子水平. 一旦语言对程序员的要求超出了猴子水平
就容易出bug.

【在 t****t 的大作中提到】
: smart pointer不是为了给猴子用的....
l*********s
发帖数: 5409
6
well, say you have to pass an async callback some object, how RAII can help
you avoid smarter pointer in this case?
f******y
发帖数: 2971
7
啥也别说了,赶快去学学smart pointer再来评论吧。

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

s******u
发帖数: 501
8
那个啥,把C和C++写在一起的人注定是两个都是半吊子。。。

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

j******t
发帖数: 788
9
This is exactly smart pointer is doing. Call destructor while leaving the
scope, and delete the raw pointer. Am I right?
"所有的资源都在同一对花括号内获取和释放,指针根本不会用
错"
g***l
发帖数: 2753
10
"所有的资源都在同一对花括号内获取和释放"
are you kidding?

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

相关主题
一个Quant Developer的C++面试题怎么准备一些hardcore C++的interview (转载)
C++的很多library到底是趋于集中,还是各个公司独自开发,各立山头function pointer 和 call-back function 有什么区别?
大家要学习C++11啊, 我觉得C++11很多FEATURE,绝对不输JAVA.is smart_ptr really that good?
进入Programming版参与讨论
m*******l
发帖数: 12782
11
true

【在 l*********s 的大作中提到】
: isn't RAII the same idea as smart pointer?
b*******s
发帖数: 5216
12
现在的smart pointer设计得非常巧妙
很喜欢

【在 f******y 的大作中提到】
: 啥也别说了,赶快去学学smart pointer再来评论吧。
a********n
发帖数: 1287
13
哈哈,想当年google面我让我实现一个smartptr的模板类。
顿时麻爪了。
只会用,不会写。

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

d***q
发帖数: 1119
14
TCPL or ruminations on c++ has a chapter for this topic.

【在 a********n 的大作中提到】
: 哈哈,想当年google面我让我实现一个smartptr的模板类。
: 顿时麻爪了。
: 只会用,不会写。

p***o
发帖数: 1252
15
shared_ptr的实现确实挺巧妙的, fopen/fclose都能放进去。

【在 d***q 的大作中提到】
: TCPL or ruminations on c++ has a chapter for this topic.
m*******l
发帖数: 12782
16
这个算不算借鉴了C#的using?

【在 p***o 的大作中提到】
: shared_ptr的实现确实挺巧妙的, fopen/fclose都能放进去。
p***o
发帖数: 1252
17
C++有RAII的时候java都不知在哪儿呢。

【在 m*******l 的大作中提到】
: 这个算不算借鉴了C#的using?
k**********g
发帖数: 989
18

Good, I have used hand-rolled COM-style (AddRef, Release) for the last 6
years.
Didn't regret a bit. Just a bit of copy and paste.
It's even simpler than shared_ptr : you don't have to care about the
different ways of passing in a destruct functor. The COM interface already
has one, on the interface.

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

t*****n
发帖数: 4908
19
不知道10年都干了什么。书总要看吧。
http://ootips.org/yonat/4dev/smart-pointers.html
http://stackoverflow.com/questions/2074132/book-about-smart-poi
http://nova.polymtl.ca/~simark/Eff/Effective/0321334876/ch05lev
现在很多人都喜欢把指针放到stl容器里面,智能指针安全多了。smart pointer不是让
程序员偷懒,而是让程序更安全。人算不如天算。而且smart pointer比不负责任的垃
圾收集机制,效率上强了太多。

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

g******l
发帖数: 5103
20
Great, another 大坑
相关主题
c++ 里用到pointer 的地方我们尽可能用smart pointer吗?C++ pointer problem
C++ most vexing parse到底怎么回事?问个C++中重复删除指针的问题
difference between: char** p and char*p[] ??问一个关于C++指针的问题
进入Programming版参与讨论
p*****y
发帖数: 1049
21
哥来评论一下,
如果你在同一个花括号用new 和 delete, 仍然有内存泄露的风险,因为程序有可能
throw exception
也就是为什么要用smart pointer
f****4
发帖数: 1359
22
“所有的资源都在同一对花括号内获取和释放” != RAII
“所有的资源都在同一对花括号内获取和释放”在异常发生的时候还是不安全的
个人感觉smart pointer好处就是加强了对拷贝支持
对于一个容器动不动就管理10万+的raw pointers,换了smart pointer是不是会有性能
影响,影响多大?
回国一个月,这里居然没再口水java vs c++,真难得啊。。。
j******t
发帖数: 788
23
这个还得感谢我的功劳,天天潜水看JAVA跟C++吵架,全是重皮话.
实在忍无可忍了.

【在 f****4 的大作中提到】
: “所有的资源都在同一对花括号内获取和释放” != RAII
: “所有的资源都在同一对花括号内获取和释放”在异常发生的时候还是不安全的
: 个人感觉smart pointer好处就是加强了对拷贝支持
: 对于一个容器动不动就管理10万+的raw pointers,换了smart pointer是不是会有性能
: 影响,影响多大?
: 回国一个月,这里居然没再口水java vs c++,真难得啊。。。

g******n
发帖数: 253
24
俺上下求索,就是想找个大坑论的评语.终于有人和俺想到一起啦。
此文虽然不如C++夕阳论和kernel无用论那么接地气,但也算个值得一跳的啦。
建议跳坑指数:4.0

【在 g******l 的大作中提到】
: Great, another 大坑
g****u
发帖数: 252
25
我狡辩一下吧. Exception的智能指针可以用Boost.ScopeExit代替. 其实C#或者
delphi的try-catch-finally是更干净的解决方案.

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

g****u
发帖数: 252
26
上面将了, 用scopeexit. 话所什么情况需要往容器里放几万个pointer指向的dynamic
objects. 我觉得应该有更好的设计方案.


【在 p*****y 的大作中提到】
: 哥来评论一下,
: 如果你在同一个花括号用new 和 delete, 仍然有内存泄露的风险,因为程序有可能
: throw exception
: 也就是为什么要用smart pointer

g*****y
发帖数: 7271
27
居然有人喜欢try-catch-finally?我最烦这个了。
一堆的catch,然后finally里面擦干净屁屁,然后再throw,多难看啊。。。

【在 g****u 的大作中提到】
: 我狡辩一下吧. Exception的智能指针可以用Boost.ScopeExit代替. 其实C#或者
: delphi的try-catch-finally是更干净的解决方案.

m*******l
发帖数: 12782
28
c#不知道,java的finally
有缺陷啊

【在 g****u 的大作中提到】
: 我狡辩一下吧. Exception的智能指针可以用Boost.ScopeExit代替. 其实C#或者
: delphi的try-catch-finally是更干净的解决方案.

e*******l
发帖数: 147
29
lz牛比
a***n
发帖数: 538
30
除了shared pointer比较恶心,其他的都还好吧。
相关主题
请教一个const pointer的问题什么时候使用c++ smart pointer?
这段code有啥问题?不如各位高手挑个专题讲讲C++11吧
琢磨了一下c++ smart pointer,发现不能到处用about STL functor and function pointers
进入Programming版参与讨论
E*******1
发帖数: 3464
31
你smart pointer可能没用好吧,怎么说smart pointer是个二流的东西。这玩意主要是
针对执行出错,throw了,结果跳过后面的delete内存释放步骤造成leak的解决方案

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

j********x
发帖数: 2330
32
我擦,本版俨然是语言流氓、猴子程序猿聚集的地方,以后只把这里当找自信的地方了
。。。

【在 g****u 的大作中提到】
: 如果所有的指针都用smart pointer包装, 只能说这个语言设计得失败. 其实C++的王道
: 是RAII. 只要坚持RAII, 所有的资源都在同一对花括号内获取和释放,指针根本不会用
: 错, 用不着什么smart pointer. 在加上smart pointer名目和种类繁多,都快赶上茴字
: 的四种写法了, 连我这个写了10年C/C++的都不怎么搞得清(smart pointer这东西至少
: 10年前就应该有了), 一旦普及起来必将bug百出引入无穷后患.

h****r
发帖数: 2056
33
boost里面就是一堆垃圾。
方便了猴子们,但严重影响性能。

【在 g****u 的大作中提到】
: 我狡辩一下吧. Exception的智能指针可以用Boost.ScopeExit代替. 其实C#或者
: delphi的try-catch-finally是更干净的解决方案.

b*******s
发帖数: 5216
34
怎么讲?

【在 h****r 的大作中提到】
: boost里面就是一堆垃圾。
: 方便了猴子们,但严重影响性能。

d*******r
发帖数: 3299
35
"C++夕阳论和kernel无用论"
都是之前的超级大坑啊,哈哈哈

【在 g******n 的大作中提到】
: 俺上下求索,就是想找个大坑论的评语.终于有人和俺想到一起啦。
: 此文虽然不如C++夕阳论和kernel无用论那么接地气,但也算个值得一跳的啦。
: 建议跳坑指数:4.0

x****u
发帖数: 44466
36
boost是鼓励小屁孩制造垃圾的工具。

【在 b*******s 的大作中提到】
: 怎么讲?
1 (共1页)
进入Programming版参与讨论
相关主题
问个C++中重复删除指针的问题C++ STL 的问题
问一个关于C++指针的问题一个Quant Developer的C++面试题
请教一个const pointer的问题C++的很多library到底是趋于集中,还是各个公司独自开发,各立山头
这段code有啥问题?大家要学习C++11啊, 我觉得C++11很多FEATURE,绝对不输JAVA.
琢磨了一下c++ smart pointer,发现不能到处用怎么准备一些hardcore C++的interview (转载)
什么时候使用c++ smart pointer?function pointer 和 call-back function 有什么区别?
不如各位高手挑个专题讲讲C++11吧is smart_ptr really that good?
about STL functor and function pointersc++ 里用到pointer 的地方我们尽可能用smart pointer吗?
相关话题的讨论汇总
话题: pointer话题: smart话题: c++话题: raii话题: 指针