Har*_* Sj 0 c++ smart-pointers weak-ptr
我对智能指针完全是新手,而且从未接触过weak_ptrC++。
我在 class 中有一个函数Y,它接受weak_ptrclass 的参数 a X。
在类的函数内部Y,我需要X通过weak_ptr.
作为参考,这里是一个粗略的类定义:
Y.cpp
class Y {
public : Y();
~Y();
int foo(std::weak_ptr<X> x);
};
Run Code Online (Sandbox Code Playgroud)
X.cpp
class X {
public : std::string func1();
int func2();
};
Run Code Online (Sandbox Code Playgroud)
foo()在类的函数内部Y,我需要能够访问函数func1并func2使用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();
}
Run Code Online (Sandbox Code Playgroud)
理由是 aweak_ptr不持有所有权(与 不同shared_ptr),因此如果您可以直接取消引用它,则在执行此操作时,目标对象将存在被其他线程销毁的风险。
在使用之前检查生成的指针 () 是否不为 null 可能是一个好主意y,除非如果它为 null 则崩溃是处理您的情况下的错误的可接受的方法。
每次调用(而不是一次并将结果保存到变量中)是一个坏.lock()主意,因为目标可能会在调用之间被破坏(并且成本会更高)。
| 归档时间: |
|
| 查看次数: |
2165 次 |
| 最近记录: |