很好地定义了隐藏指针的C ++程序

时间:2013-02-06 06:16:37

标签: c++ c++11 garbage-collection

According to Wikipedia

  

C ++ 11定义指针值“安全”的条件   从其他值派生而来。实现可以指定它   在“严格指针安全”下运行,在这种情况下指针指向   不按照这些规则派生可能会变得无效。

在我阅读它时,您可以获得实现使用的安全模型,但是这对于编译器是固定的(可能通过命令行开关变量)。

假设我有隐藏指针的代码,这样的代码肯定不会在垃圾收集器上使用天真的螺栓运行。然而,收藏家(像我自己的)和Boehm提供了在某些对象中寻找指针的钩子。

我特别想到JudyArrays。这些是必须隐藏密钥的数字尝试。我的问题基本上是否使用这样的数据结构会导致程序的行为在C ++ 11中未定义。

我希望不会(因为Judy Arrays的表现优于其他一切)。也正如它发生..我正在使用它们实现垃圾收集器。但我担心的是,因为“最低要求”根本不起作用,并且在最初关于C ++一致性模型(英国和澳大利亚)的辩论中遭到强烈反对。参数要求更好。但是C ++ 11 GC相关的文本似乎都是两者兼而有之,所以我很困惑!

1 个答案:

答案 0 :(得分:1)

它的实现定义了实现是否提供了轻松的指针安全性(您似乎想要的)或严格的指针安全性(指针仅在safely derived时仍然有效)。正如您所暗示的那样,您可以致电get_pointer_safety以了解该政策是什么,但该标准无法指定/更改政策。

但是,您可以侧面提出这个问题。如果你可以在隐藏指针之前调用declare_reachable(传递指针值),它将保持有效,直到匹配调用undeclare_reachable(此处“匹配”表示调用嵌套)。