3

根据维基百科

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

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

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

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

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

4

1 回答 1

1

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

但是,您可以回避这个问题。如果您可以在隐藏指针之前调用declare_reachable(传递该指针值),则它在匹配调用之前保持有效undeclare_reachable(这里“匹配”表示调用嵌套)。

于 2013-02-06T07:56:15.433 回答