如何从 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()
是一个 糟糕的 想法(而不是一次并将结果保存到变量),因为目标可以在调用之间被销毁 (而且成本会更高)。
我完全是智能指针的新手,我从来没有用C++处理过weak_ptr
。
我在 class Y
中有一个函数,它接受 class X
.
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()
是一个 糟糕的 想法(而不是一次并将结果保存到变量),因为目标可以在调用之间被销毁 (而且成本会更高)。