function template
<memory>

std::undeclare_reachable

template <class T> T* undeclare_reachable (T* p);
撤销指针可达性声明
撤销先前为p所指向对象声明的可达性,并返回一个指向该对象的安全派生指针。

如果为p所指向的对象多次调用declare_reachable,则该对象将被视为可达,直到undeclare_reachable被调用相同次数为止。

参数

p
指向一个先前通过declare_reachable声明为可达的对象指针。

返回值

一个指向p的安全派生指针。该指针保证与p相等。

此函数不抛出异常。

示例

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

int main() {
  int * p = new int (1);    // dynamic object

  std::declare_reachable(p);

  p = (int*)((std::uintptr_t)p ^ UINTPTR_MAX);  // scrambling p

  // dynamic object not reachable by any live safely-derived pointer

  p = std::undeclare_reachable((int*)((std::uintptr_t)p ^ UINTPTR_MAX));
  // p is back again a safely-derived pointer to the dynamic object

  std::cout << "p: " << *p << '\n';
  delete p;

  return 0;
}

输出
p: 1


另见