在chromium中使用智能指针

在chromium这种多进程,多线程,代码量巨大的工程里,很多对象的创建、使用和销毁往往不在一个地方,对象的生命周期管理起来非常困难。这种情况下智能指针就能派上用场了。智能指针本身是一个局部的对象,它管理着堆上分配的对象的指针,当智能指针超出作用域是,要么销毁管理的对象,要么交出对象的管理权,让其他智能指针接管对象。

使用的最多的是scoped_ptr,而ScopedVector是类似std::vector来包含指针的容器,在他内部就是一个std::vector<T*> v_。scoped_refptr则是一种引用计数的智能指针,chromium一般建议我们不用使用这个。WeakPtr类似原始的指针,不会管理对象生命周期

如何选择使用哪种智能指针

  • 拥有对象:如果拥有对象的管理权,使用scoped_ptr/ScopedVector。
  • 不拥有对象:使用原始指针或者WeakPtr。如果别人拥有对象管理权,而你需要知道指针是否有效,可以用WeakPtr去检测。
  • 引用计数对象:使用scoped_refptr。最好在一个线程中管理一个对象。
  • 平台相关对象:用这样的base::win::ScopedHandle, base::win::ScopedComPtr帮助类去管理,类似scoped_ptr。

还有一点,不要使用智能指针的引用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注