C++11 如果要传输资源,应选择哪种参数类型?弱ptr?或共享\u ptr

C++11 如果要传输资源,应选择哪种参数类型?弱ptr?或共享\u ptr,c++11,parameters,shared-ptr,smart-pointers,weak-ptr,C++11,Parameters,Shared Ptr,Smart Pointers,Weak Ptr,有一个资源:“aaa”,谁的类型是“aaa”。 “aaa”由共享ptr管理,我们可以通过功能得到它的弱ptr: std::weak_ptr<AAA> get_aaa_weakPtr(); std::weak_ptr get_aaa_weakPtr(); 现在,客户机_代码希望访问“aaa”,并将“aaa”传输到其子_函数。 就这样, void mainFunc(){ std::shared_ptr<AAA> sPtr = get_aaa_weakPtr().lock

有一个资源:“aaa”,谁的类型是“aaa”。 “aaa”由共享ptr管理,我们可以通过功能得到它的弱ptr:

std::weak_ptr<AAA> get_aaa_weakPtr();
std::weak_ptr get_aaa_weakPtr();
现在,客户机_代码希望访问“aaa”,并将“aaa”传输到其子_函数。 就这样,

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 */ );
}
void mainFunc(){
std::shared_ptr sPtr=get_aaa_weakPtr().lock();
断言(sPtr);
//使用sPtr
// ...
childFuncA(/*也需要aaa*/);
childFuncB(/*也需要aaa*/);
childFuncC(/*也需要aaa*/);
}
我应该在子函数中选择哪种类型的参数?
弱ptr?或共享\u ptr?

在并发编程的情况下,即childFuncX可以是异步的,您应该传递弱\u ptr,并在函数内部检查指针的有效性(使用弱\u ptr::lock()),并确保使用互斥锁的std::lock\u保护单次访问资源,在您的情况下,可以直接在主函数中实例化(或根据您的需要使用唯一的锁定)。避免全局和静态,以避免软件随着时间的推移而出现将来的问题。

如果是并发编程,即childFuncX可以是异步的,您应该传递一个弱的\u ptr,并在函数内部检查指针的有效性(使用弱的\u ptr::lock()并使用互斥锁的std::lock_-guard确保对资源的单一访问,在您的情况下,可以直接在主函数中实例化(或根据需要使用唯一的_-lock)。避免全局和静态,以避免软件随着时间的推移而出现未来问题。

非常感谢您的建议。我认为弱ptr是可靠的。非常感谢您的建议。我认为弱ptr是可靠的。
assert()
可能是错误的。@Deduplicator怎么办:“assert(sPtr!=nullptr);”?问题是指针实际为空的可能性相当大。
assert()
可能是错误的。@重复数据消除程序:“assert(sPtr!=nullptr);”?问题是指针实际为空的可能性相当大。