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百出引入无穷后患.
|
|
|
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 | |
|
|
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 | |
a***n 发帖数: 538 | 30 除了shared pointer比较恶心,其他的都还好吧。 |
|
|
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 的大作中提到】 : 怎么讲?
|