Chromium Base学习笔记 —— Weakptr

来源:互联网 发布:lb极速网络 编辑:程序博客网 时间:2024/06/04 00:23

WeakPtr 不会影响Object的声明周期。 任何其他的对象,包括它自己在任何时间都可以delete。

WeakPtr存在的意义就是保证其他对象访问它的时候的安全性(有可能被意外delete,所以访问到Null等)

// EXAMPLE:  class Controller {   public:    void SpawnWorker() { Worker::StartNew(weak_factory_.GetWeakPtr()); }    void WorkComplete(const Result& result) { ... }   private:    // Member variables should appear before the WeakPtrFactory, to ensure    // that any WeakPtrs to Controller are invalidated before its members    // variable's destructors are executed, rendering them invalid.    WeakPtrFactory<Controller> weak_factory_;  };  class Worker {   public:    static void StartNew(const WeakPtr<Controller>& controller) {      Worker* worker = new Worker(controller);      // Kick off asynchronous processing...    }   private:    Worker(const WeakPtr<Controller>& controller)        : controller_(controller) {}    void DidCompleteAsynchronousProcessing(const Result& result) {      if (controller_)        controller_->WorkComplete(result);    }    WeakPtr<Controller> controller_;  };
Weak pointers may be passed safely between threads

But the object must be dereferenced(也就是不能是RefCountedThreadSafe的实例)



原创粉丝点击