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的实例)