如何从 C++ 中的弱指针访问 class 成员函数?

How to access the class member functions from a weak pointer in C++?

我完全是智能指针的新手,我从来没有用C++处理过weak_ptr

我在 class Y 中有一个函数,它接受 class X.

的参数 a weak_ptr

在classY的函数里面,我需要通过weak_ptr.[=27=访问classX的成员函数]

作为参考,这里有一个粗略的 class 定义:

Y.cpp

class Y {
  public : Y();
           ~Y();
           int foo(std::weak_ptr<X> x);
};

X.cpp

class X {
 public : std::string func1();
          int func2();
};

在 class Y 中的 foo() 函数内部,我需要能够使用 weak_ptr x.

我不知道为什么我需要使用 weak_ptr,但这就是我应该实现的。

我无法使用 weak_ptr 找到任何初学者友好的示例代码。

您需要先将其转换为 shared_ptr,使用 .lock():

int foo(std::weak_ptr<X> x)
{
    std::shared_ptr<X> y = x.lock(); // Or `auto y = x.lock();`.
    y->do_stuff();
}

基本原理是 weak_ptr 不拥有所有权(与 shared_ptr 不同),因此如果您可以直接取消引用它,目标对象将有被销毁的风险执行此操作时使用不同的线程。

在使用之前检查结果指针 (y) 是否不为 null 可能是个好主意,除非它为 null 时崩溃是处理您的情况的错误的可接受方法。

每次调用 .lock() 是一个 糟糕的 想法(而不是一次并将结果保存到变量),因为目标可以在调用之间被销毁 (而且成本会更高)。