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


另見