public member function
<memory>

std::weak_ptr::lock

shared_ptr<element_type> lock() const noexcept;
锁定并恢复 weak_ptr
如果 weak_ptr 对象未 过期,则返回一个保留了 weak_ptr 对象信息的 shared_ptr

如果 weak_ptr 对象已过期(包括它是 空的),则函数返回一个 空的 shared_ptr(如同 默认构造 的)。

由于 shared_ptr 对象 计数 为所有者,此函数会锁定 所拥有指针,防止其被释放(至少在返回的对象不释放它之前)。

此操作是原子执行的。

参数



返回值

如果对象是 weak_ptr::expired,则返回一个 默认构造的 shared_ptr 对象。
否则,返回一个 shared_ptr 对象,其中包含由 weak_ptr 保留的信息。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// weak_ptr::lock example
#include <iostream>
#include <memory>

int main () {
  std::shared_ptr<int> sp1,sp2;
  std::weak_ptr<int> wp;
                                       // sharing group:
                                       // --------------
  sp1 = std::make_shared<int> (20);    // sp1
  wp = sp1;                            // sp1, wp

  sp2 = wp.lock();                     // sp1, wp, sp2
  sp1.reset();                         //      wp, sp2

  sp1 = wp.lock();                     // sp1, wp, sp2

  std::cout << "*sp1: " << *sp1 << '\n';
  std::cout << "*sp2: " << *sp2 << '\n';

  return 0;
}

输出
*sp1: 20
*sp2: 20


另见