STL 用のスタック ベースのアロケータを作成しています。アイデアは、メモリの大きなチャンクを一度割り当て、オブジェクトが構築されている間に蓄積させ、必要に応じてゼロにリセットすることです。たとえば、ゲームのレベル情報や、ゲーム ループの 1 回の反復で作成されるオブジェクトのレベル情報を格納するために使用できます。スタックを構築するレベルをロードするとき、新しいレベルをロードする必要があるときは、トップ ポインターを先頭にリセットするだけで、OS 呼び出しは必要ありません。
今私の問題は、標準アロケーターが物事を行う方法、つまりdeallocate()
関数です。この記事では、それを読むことができます
デフォルトのアロケーターでは、ストレージのブロックは ::operator delete を使用して割り当て解除されます。
これは、deallocate()
関数を使用することで、メモリが解放され、デストラクタが呼び出されることを意味します。deallocate()
個々のオブジェクトのメモリの割り当てを解除するつもりはないので、私のアロケータの目的のために、関数を空にすることができます。
問題は、STL コンテナーがアロケーター クラスを使用して新しいオブジェクトを作成する方法です。デフォルトのアロケータはnew
anddelete
を使用するため、コンテナは or を呼び出しますconstruct()
かdestroy()
? deallocate()
関数に記述子も呼び出させる必要がありますか?
allocate()
同じ質問がandconstruct()
メソッドにも当てはまると思います。