函数
<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


另见