引用:
作者: sjinny 这么晚还在线啊……
实践上发生的概率我也说不清。
ref count的慢和浪费我觉得如果少用那么是可以接受的,按照我心中的优先顺序是:桟 > 内存池 > 智能指针 >= gc。
所以大多数情况下应该把生存期分析清楚了,用前两个来做。我发的这些帖子,就是希望能够找到更多的机制,来填补智能指针之前的空白,毕竟桟和内存池的表达力还是有限的。
其实,自动化的目的是为了减少人脑资源的耗费,而高确定性则是让人比较容易了解系统运行的过程,从而提高可靠性改善的可能以及性能优化的可能。
至于那些wrapper,既然叫做wrapper,那么就是不需要重复写很多遍的东西。很多操作,如果只做一次,人们往往能够做好,要重复做很多遍就难免不出错了。所以把addRef和subRef封装起来后,智能指针的使用就容易了很多。 |
当我们在一个体系里面有多个选择的时候,你说的那个顺序可能没错。问题是,选择越多,错误越多。C++程序写到现在,一点内存错误都没有犯过的人有几个?为什么犯错误呢?往往是该释放的没释放,或者不该释放的释放了。这往往就是程序员在选择方式的时候错了。无论这个“桟 > 内存池 > 智能指针 >= gc”是不是对的,假设我在某个语言/平台上,我只允许你永远使用这些方法中的一个,你会怎么选择呢?事实上,stack不能作为唯一的形式出现,heap可以,但是仅有heap没有stack的情况下,为什么不加入gc呢?