Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::弱\u ptr:锁定还是共享\u ptr构造函数?_C++_C++11_Smart Pointers_Weak Ptr - Fatal编程技术网

C++ std::弱\u ptr:锁定还是共享\u ptr构造函数?

C++ std::弱\u ptr:锁定还是共享\u ptr构造函数?,c++,c++11,smart-pointers,weak-ptr,C++,C++11,Smart Pointers,Weak Ptr,似乎有两种方法可以临时获取由弱\u ptr指向的资源的所有权: 使用lock() 将弱\u ptr传递给共享\u ptr构造函数 这两种方法都会生成一个共享的ptr,如果弱的ptr为空,并且共享的ptr构造函数抛出异常,则锁将返回一个空的ptr 所以问题是:什么时候应该使用其中一种?是否有与此相关的一般准则或最佳实践?复制自 此函数和std::shared_ptr的构造函数都可以使用 获取由引用的托管对象的临时所有权 std::弱ptr。区别在于 std::shared_ptr的std::wea

似乎有两种方法可以临时获取由
弱\u ptr
指向的资源的所有权:

  • 使用
    lock()
  • 弱\u ptr
    传递给
    共享\u ptr
    构造函数
  • 这两种方法都会生成一个
    共享的ptr
    ,如果
    弱的ptr
    为空,并且
    共享的ptr
    构造函数抛出异常,则锁将返回一个
    空的ptr

    所以问题是:什么时候应该使用其中一种?是否有与此相关的一般准则或最佳实践?

    复制自

    此函数和std::shared_ptr的构造函数都可以使用 获取由引用的托管对象的临时所有权 std::弱ptr。区别在于 std::shared_ptr的std::weak_ptr参数为 empty,而std::weak_ptr::lock()构造空 std::共享的ptr

    这让我相信,您可以根据是否希望抛出异常来选择使用哪一个。构造函数可以在必须工作时使用,而
    锁定
    可以在它可能不工作且您可以检查时使用