Я пишу сборщик мусора для C / C ++ как упражнение по программированию, и часть этого включает глобальное переопределение new
. Однако сборщик мусора также использует unordered_map
(для хранения указателей на выделенные блоки), и все будет серьезно испорчено, если карта попытается использовать переопределенный новый (я думаю, он будет пытаться бесконечно зацикливаться). Чтобы создать его, я хотел использовать размещение нового, чтобы избежать вызова переопределенного нового:
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 вызывает новый внутренний вызов. Поможет ли это дать распределитель (как мне это сделать?)? Если нет, можно ли решить эту проблему?