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 解决方法
这个东西是允许垃圾收集的实现,虽然我不知道任何编译器(至少在主流)使用它.
表面上你可以找到你的用户,使用 我会说忽略它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |