В настоящее время я пишу распределитель, который должен использоваться стандартными структурами данных C ++, т.е. он реализует Концепция аллокатора.
Распределитель довольно прост: он выделяет блоки из x
объектов и всегда передает следующий объект, если текущий блок не заполнен, в противном случае он выделяет новый блок.
Теперь мой вопрос: как обрабатывать эти куски, когда распределитель уничтожен / скопирован / перемещен? Концепция распределителя ничего не говорит о том, что должно произойти в этих случаях.
Вот мои мысли:
- Уничтожение: распределитель может уничтожить все свои блоки. Но тогда ни один объект, который использует какой-либо из выделенных объектов, не может пережить распределитель.
- Копирование: самая простая идея - скопировать фрагменты. Но если подумать, это не имеет смысла: никто не знает адреса объектов в скопированных фрагментах, поэтому они просто копируются без какой-либо выгоды. Может быть, скопированный распределитель должен начинаться с пустого списка кусков.
- Перемещение: фрагменты следует переместить в новый распределитель. Старый должен остаться с пустым списком кусков.
Мои предположения верны? Если нет, то почему и где это определяется?