程序治理

28 Jun 2009 / Edit / History
本文是对许老大的 一篇博文 的评论。

垃圾回收是 C++ 语言层不具备的一个功能, boost shared_ptr 在库层次实现了这个功能。对于这种超越语言功能的库,我的建议就是加强程序治理: 对使用这些库建立一些规则, 扬长避短。

  1. 对于同一个对象,要么完全使用 shared_ptr, 要么完全不使用 shared_ptr,原文提到的几个问题似乎都与这个相关。

  2. 对于一个类,在设计时就要决定这个类是否要以 shared_ptr 方法来使用。

  3. 对于需要用 shared_ptr 的类,建议采用如下的定义方式

    class _Foo {
    };
    typedef boost::shared_ptr<_Foo> Foo;
    Foo foo_new(constructor args...);




这套规则有一个变种(主要是为了解决 shared_ptr 的传播性问题): 限制 shared_ptr 在一个模块内部使用, 在模块的入口 API 处对需要返回的对象进行拷贝,以脱离 shared_ptr。

C 语言的 gobject 和 pyobject 库都有 GC 的支持,但解决起来似乎比 C++ 顺利很多,我觉得有如下的原因

  • 类和GC的概念是同时引入的, 而 C++ 的解决方案则拆成了两块

  • C++ 过于崇尚自由, 而 C 语言则已经在程序治理方面积累了很多经验

Tags: c, c++

Related Posts:

comments powered by Disqus
Copyright © 2017 LI Daobing, Powered by github:pages, Jekyll, bootstrap, Designed by quanquan
Fork me on GitHub