函式
<memory>

std::get_pointer_safety

pointer_safety get_pointer_safety() noexcept;
獲取指標安全設定
返回實現使用的指標安全設定,型別為 pointer_safety,它可以取以下任何值:

描述
relaxed指標值的有效性不依賴於它是否是安全派生指標值。
preferred指標值的有效性不依賴於它是否是安全派生指標值。
可能正在執行記憶體洩漏檢測器,以便程式可以避免誤報洩漏。
strict不是安全派生指標值的指標值是無效的指標值,除非它指向的完整物件是動態儲存持續時間並且先前已宣告為可達
可能正在執行垃圾回收器,以便自動刪除非可跟蹤物件。

安全派生指標值是指由operator new的預設定義返回的指標值,或者是由它派生的值,透過明確定義的指標算術、指標轉換或指標重解釋(reinterpret_cast),包括與其他指標型別或整數型別(至少與intptr_t一樣大)的相互轉換,或者來自具有相同大小和對齊方式的字元序列。

當實現使用嚴格指標安全時,任何使用operator new預設定義動態分配的物件,如果不能透過安全派生指標或等效的整數表示形式來追蹤,則可能會被自動銷燬,從而使指向它的任何指標值失效。

請注意,這不會影響透過其他方式動態分配的記憶體,例如使用 C 庫的 malloc 或自定義的 operator new 重定義。

引數



返回值

編譯器的指標安全設定。
pointer_safety 是在 <memory> 中定義的 enum class 型別。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// get_pointer_safety example
#include <iostream>
#include <memory>

int main() {
  std::cout << "Pointer safety: ";
  switch (std::get_pointer_safety()) {
    case std::pointer_safety::relaxed:   std::cout << "relaxed";   break;
    case std::pointer_safety::preferred: std::cout << "preferred"; break;
    case std::pointer_safety::strict:    std::cout << "strict";    break;
  }
  std::cout << '\n';
  return 0;
}

可能的輸出
Pointer safety: relaxed


另見