在弱指针上调用函数

Calling a function on weak pointer

我写了下面的代码:

#include <iostream>
#include <memory>
using namespace std;

class Foo
{
    int x = 0;
public:
    int get() const { return x; }
    void set(int x) { this->x = x; }
};

int main(){
    auto sp = shared_ptr<Foo>(new Foo());    
    weak_ptr<Foo> wp;
    wp = sp;
    return 0;
}

我想调用共享指针 spwp 上设置的方法,正确的调用方法是什么?我发现 sp->set(5); 适用于共享指针,但同样不适用于弱指针。

您不能对 weak_ptr 进行操作。如果 shared_ptr 已被删除,这就像取消引用已被删除的原始指针。

每当你想访问其中包含的指针时,你会锁定它以验证你的 shared_ptr 仍然存在。

if (auto sp = wp.lock()) {
  sp->set(10);
} else {
  // sp no longer exists!
}