私はプログラミングの練習として C/C++ のガベージ コレクターを書いていますnew
。ただし、ガベージ コレクターはunordered_map
(割り当てられたブロックへのポインターを格納するために) も使用し、マップがオーバーライドされた new を使用しようとすると、事態は深刻に混乱します (無限にループしようとします)。それを作成するために、オーバーライドされた new の呼び出しを避けるために、placement new を使用したいと考えました。
void *buffer = malloc(sizeof(unordered_map<void *, mem_t *>));
unordered_map<void *, mem_t *> map = new(buffer) unordered_map<void *, mem_t *>();
(mem_t は私が定義した構造体ですが、関連があるとは思いません。) 実行すると、このコードは unordered_map コンストラクター内でセグメンテーション違反を起こします。プレースメント new を使用すれば問題は解決すると思いましたが、どうやらそうではないようです。unordered_map が内部で new を呼び出していることは確かです。アロケータを与えると (どうすればいいですか?)、この問題は解決しますか? そうでない場合、この問題は修正可能ですか?