有一个资源:“ aaa”,类型为“ AAA”。 “ aaa”由shared_ptr管理,我们可以通过函数获取它的weak_ptr:
std::weak_ptr<AAA> get_aaa_weakPtr();
现在,client_code要访问“ aaa”,并将“ aaa”转移到它的child_functions中。 就是这样:
void mainFunc(){
std::shared_ptr<AAA> sPtr = get_aaa_weakPtr().lock();
assert( sPtr );
// use sPtr
// ...
childFuncA( /* also_need_aaa */ );
childFuncB( /* also_need_aaa */ );
childFuncC( /* also_need_aaa */ );
}
我应该在child_functions中选择哪种参数类型? weak_ptr?或shared_ptr?
答案 0 :(得分:0)
在并发编程的情况下,例如childFuncX可以是异步的,您应该传递weak_ptr,然后在函数内部检查指针的有效性(使用weak_ptr :: lock()),并确保使用一个互斥锁的std :: lock_guard,在您情况下可以直接在主函数中实例化(或根据需要使用unique_lock)。避免使用全局和静态方法,以避免将来随着软件的发展而出现问题。