如果要传输资源,应该选择哪种参数类型? weak_ptr?或shared_ptr

时间:2019-06-28 07:20:14

标签: c++11 parameters shared-ptr smart-pointers weak-ptr

有一个资源:“ 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?

1 个答案:

答案 0 :(得分:0)

在并发编程的情况下,例如childFuncX可以是异步的,您应该传递weak_ptr,然后在函数内部检查指针的有效性(使用weak_ptr :: lock()),并确保使用一个互斥锁的std :: lock_guard,在您情况下可以直接在主函数中实例化(或根据需要使用unique_lock)。避免使用全局和静态方法,以避免将来随着软件的发展而出现问题。