メモリ 0.4:洗練、エラー処理、ストレージ、特性、ドキュメントなど

実に長い時間がかかりました - 3 ヶ月マイナス 1 日 - ですが、ようやく foonathan/memory のバージョン 0.4 を完成させました。このリリースには多くの変更が含まれており、コミット数は 2 倍以上になりました.

研磨

インターフェースは完全にきれいになり、歴史的に成長したものを取り除きました.これには、多くのものの名前の変更または移動が必要でした.特に:

  • 08 10になりました 新しいヘッダー 22 に移動しました
  • 3949 単純に 57 になりました そして 64 新しいハダー 79
  • 8396 同様に 109 に名前が変更されます と 115 通常のアロケータも処理できるため
  • 128のジャングル 、 136 または 146 typedef はすべて 151 です 、同様にゲッターの場合、それらはすべて 169 です 今
  • 179187 クラスにちなんで名付けられました:191 そして 200 それぞれ;他のプール ヘッダーは 215 を取得しています -プレフィックスも
  • 229 現在は 234 です 他のヘッダーと同様の理由で

また、ドキュメントを書いているときに気づいたいくつかの欠けている機能を追加しました。 ほとんどすべてのクラスまたはエイリアス、または他のクラスのデフォルトのテンプレート引数で。

エラー処理

洗練されたもう 1 つの点は、エラー処理機能です。以前は、さまざまな例外と 254 の呼び出しがごちゃごちゃしていました。 .今では、明確に定義されたインターフェースと例外タイプを使用しています。

ただし、これらの機能はハンドラー関数を使用してカスタマイズできます。これにより、例外サポートが無効になっている場合でも、ユーザー定義のエラー処理が可能になります。

アロケーター ストレージと特性の改善

古いアロケータ アダプタは実装で完全に変更されています。新しい 266 クラス テンプレートは 277 を取ります 280 を格納します 294 のようなアダプタ または 304 316 の単なるエイリアスになりました 特定のポリシーを持つテンプレート。

タイプ消去ストレージも追加され、タグ タイプ 328 337 として指定できます どこでも 343 によって保存されます 、356 のように 、 369 または 373 387 の特殊化を有効にします。 type-erasure を使用して、任意の 396 への一般的な参照を格納します .

404 のデフォルトのテンプレート特殊化 すべての 410 を含むより広い範囲のタイプを処理できるようになりました。 クラス!これに最低限必要なインターフェースは 422 に減りました と 432 のみ、メンバー関数が欠落している場合のデフォルトが改善され、型が基準を満たさない場合のエラー メッセージが改善されます。441 のサポートの追加 452 を渡すことができるコンセプト どこでも 469 が必要です。

ノードサイズ デバッガー

プール アロケータの問題は、ノード サイズが必要なことです。たとえば、478 を使用する場合は、 489 で あなたが書く:

memory::memory_pool<> pool(???, 4096);
memory::list<int, decltype(pool)> list(pool);

495の時点で プール内の各ノードのサイズに属します。 16? 32? 508 の各ノードのサイズに依存します 518 の .しかし、内部ノード サイズにはアクセスできないため、そのサイズを取得する簡単で移植可能な方法はありません。

521 を追加しました .このツールは、再バインドされる型のサイズを追跡するカスタム アロケーターを渡すことで、STL コンテナーのノード サイズをデバッグします。ヘッダー 531 に定数を自動的に生成します。 これには適切なノード サイズが含まれており、次のように記述できます:

memory::memory_pool<> pool(memory::list_node_size<int>::value, 4096);
memory::list<int, decltype(pool)> list(pool);

その他の言及する価値のあること

  • http://memory.foonathan.net/ でホストされている新しいドキュメントとチュートリアル
  • 542 のような標準ライブラリの明示的なラッパーを除くすべての機能 そして 550 - 独立した実装に取り​​組むことができます
  • 互換性チェックは foonathan/compatibility に委託されています
  • バグ修正、バグ修正、バグ修正、特にアクティブ化されたフェンス メモリの配置の問題に関する