chromium中使用WeakPtr

WeakPtr为其他对象想访问某个对象,却又不拥有或者增加该对象的引用计数提供了方法。WeakPtr不会影响指针所指向对象的生命周期。

通常WeakPtr与WeakPtrFactory搭配起来使用。WeakPtrFactory当作类的成员,可以通过WeakPtrFactory返回一个WeakPtr,如:

有点需要注意的是,类中WeakPtrFactory<Foo> weak_factory_的成员需要放在所有其他成员的后面,确保其他成员的析构函数执行的时候WeakPtrs还是有效的。

其实WeakPtr的用法还是很简单的,通过类的GetWeadPtr方法获得了WeakPtr指针,然后在后面使用的时候判断一下WeakPtr是否还有效。

WeakPtr在chromium中有个特别的用处就是配合bind,当WeakPtr的指针不再有效的时候,自动取消了task的执行。

WeakPtr可以在线程间传递,但是只能在创建的线程上使用。可以在A线程把WeakPtr posttask到B线程,但是B线程不能使用这个WeakPtr,B线程再把WeakPtr Posttask到A线程才可以使用它。

《chromium中使用WeakPtr》有2个想法

  1. 析构顺序与声明的顺序相反
    WeakPtrFactory应该放在所有其他成员最后面,
    确保析构函数执行的时候WeakPtrs最先变成无效状态

发表评论

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