C ++ 11定义指针值“安全”的条件 从其他值派生而来。实现可以指定它 在“严格指针安全”下运行,在这种情况下指针指向 不按照这些规则派生可能会变得无效。
在我阅读它时,您可以获得实现使用的安全模型,但是这对于编译器是固定的(可能通过命令行开关变量)。
假设我有隐藏指针的代码,这样的代码肯定不会在垃圾收集器上使用天真的螺栓运行。然而,收藏家(像我自己的)和Boehm提供了在某些对象中寻找指针的钩子。
我特别想到JudyArrays。这些是必须隐藏密钥的数字尝试。我的问题基本上是否使用这样的数据结构会导致程序的行为在C ++ 11中未定义。
我希望不会(因为Judy Arrays的表现优于其他一切)。也正如它发生..我正在使用它们实现垃圾收集器。但我担心的是,因为“最低要求”根本不起作用,并且在最初关于C ++一致性模型(英国和澳大利亚)的辩论中遭到强烈反对。参数要求更好。但是C ++ 11 GC相关的文本似乎都是两者兼而有之,所以我很困惑!
答案 0 :(得分:1)
它的实现定义了实现是否提供了轻松的指针安全性(您似乎想要的)或严格的指针安全性(指针仅在safely derived
时仍然有效)。正如您所暗示的那样,您可以致电get_pointer_safety
以了解该政策是什么,但该标准无法指定/更改政策。
但是,您可以侧面提出这个问题。如果你可以在隐藏指针之前调用declare_reachable
(传递指针值),它将保持有效,直到匹配调用undeclare_reachable
(此处“匹配”表示调用嵌套)。