3

ウィキペディアによると

C ++ 11は、ポインタ値が他の値から「安全に派生」する条件を定義します。実装は、「厳密なポインターの安全性」の下で動作するように指定する場合があります。その場合、これらのルールに従って派生されていないポインターは無効になる可能性があります。

私が読んだように、実装で使用される安全モデルを取得できますが、それはコンパイラーで修正されています(コマンドラインスイッチで可変になる可能性があります)。

ポインターを非表示にするコードがあるとすると、そのようなコードはガベージコレクターの素朴なボルトでは絶対に実行されません。ただし、コレクター(私のような)とBoehmは、特定のオブジェクト内のポインターを見つけるためのフックを提供します。

特にJudyArrayについて考えています。これらは必然的にキーを隠すデジタルトライです。私の質問は基本的に、そのようなデータ構造を使用すると、C++11でプログラムの動作が未定義になるかどうかです。

私はそうしないことを望んでいます(Judyアレイは他のすべてよりも優れているため)。また、たまたま..ガベージコレクターを実装するためにそれらを使用しています。ただし、「最小要件」は一般的にはまったく機能せず、C ++適合モデルに関する最初の議論(英国とオーストラリアによる)では強く反対されたため、私は懸念しています。パラメトリック要件の方が優れています。しかし、C ++ 11 GC関連のテキストは両方のビットのように見えるので、私は混乱しています!

4

1 に答える 1

1

これは、実装が緩和されたポインターの安全性(必要と思われるもの)を提供するか、厳密なポインターの安全性(ポインターが有効な場合にのみ有効である)を提供するかを定義した実装ですsafely derived。あなたが暗示しているように、あなたはget_pointer_safetyポリシーが何であるかを知るために呼び出すことができますが、標準はポリシーを指定/変更する方法を提供していません。

ただし、この質問を回避できる場合があります。declare_reachableポインタを非表示にする前に(そのポインタ値を渡す)を呼び出すことができる場合、への一致する呼び出しundeclare_reachable(ここで「一致する」はネストの呼び出しを意味します)まで有効です。

于 2013-02-06T07:56:15.433 に答える