1

メモリの割り当て解除はより問題になります。割り当て解除時に情報の一部が失われるためです。解放するためのポインターしかなく、そのポインターがどのチャンクに属しているかがわからないためです。chunks_ をウォークスルーし、指定されたポインターが pData_ と pData_ + blockSize_ * numBlocks_ の間にあるかどうかを確認できます。

Modern C++ design 2001 から、76 ページ

私の理解が正しければ、特定のポインターが特定の配列内の要素を指しているかどうかをチェックするために説明されているアルゴリズムには、異なる配列からの 2 つのポインターの比較が含まれます。比較演算子が >= または <= (非常に可能性が高いですか?) の場合、未定義の動作が発生します。

しかし、作成者はこのプロシージャまたは演算子を明示的に指定していないため、この問題は読者に任せます。(または、作者が間違いを犯しましたか? 彼は少なくともヒントを与えることができます。)

解決策の 1 つは、!= を使用することです。これにより、解放が 100 倍遅くなります。または、特定の状況下では、特定の未定義の動作が許容される場合があります。では、どのような状況下で、上記の未定義の動作を喜んで許容できるのでしょうか?

4

0 に答える 0