c – 轻松或严格的指针安全?
|
我遇到了宽松/严格的指针安全概念,并且实现定义了实现是放松还是严格指针安全.我的问题是关于现代实施:
clang和g有严格或轻松的指针安全吗? 我想澄清关于严格指针安全概念的以下事项.有一个引用(第3.7.4.3/4节):
这个限制对我来说完全不清楚.此外,我尝试用cplusplus.com example进行实验 // 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;
}
代码甚至无法编译. demo 解决方法
这个东西是允许垃圾收集的实现,虽然我不知道任何编译器(至少在主流)使用它.
表面上你可以找到你的用户,使用 我会说忽略它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
