Как реализуется присвоение контейнера с учетом распределителя?

Например, изstd :: deque :: operator = в C ++
(1) Копировать Назначение (const std :: deque & other)

Заменяет содержимое копией содержимого другого.
Если std :: allocator_traits :: пропагата_on_container_copy_assignment () имеет значение true, целевой распределитель заменяется копией исходного распределителя. Если целевые и исходные распределители не сравниваются равными, целевой (* this) распределитель используется для освобождения памяти, а другой распределитель используется для ее выделения перед копированием элементов.

Еслиthis->get_allocator() == other.get_allocator()Я могу просто уничтожить и освободитьthis'элементы, если необходимо, или выделять и конструировать элементы, если необходимо, или копировать-назначать элементы изother в*this если нужно.
Но что если нет? Означает ли приведенная выше цитата, что я не могу копировать-присваивать элементы, поэтому мне нужно сначала уничтожить и освободить ВСЕ элементы, используяthis->get_allocator(), а затем выделить и построить элементы, используяother.get_allocator()?
Но если это так, зачем мне использоватьother.get_allocator() для распределения?
Не приведет ли это к ошибке во время выполнения, так какthis не освободит память должным образом?

(2) Назначение перемещения (std :: deque && other)

Заменяет содержимое на другое, используя семантику перемещения (т.е. данные в другом перемещаются из другого в этот контейнер). другой находится в допустимом, но неопределенном состоянии впоследствии. Если std :: allocator_traits :: пропагат_он_контейнер_move_assignment () имеет значение true, целевой распределитель заменяется копией исходного распределителя. Если оно ложно и исходные и целевые распределители не сравниваются равными, цель не может стать владельцем исходной памяти и должна перемещать-назначать каждый элемент индивидуально, выделяя дополнительную память, используя при необходимости свой собственный распределитель. В любом случае, все элементы, изначально присутствующие в *, либо уничтожаются, либо заменяются на поэлементное перемещение-присваивание.

Еслиthis->get_allocator() == other.get_allocator()это простая задача.
Но если нет, то следуют те же вопросы, что и выше, за исключением того, что в этом случае используется перемещение

В обоих случаях у меня есть дополнительный вопрос.
Если элементы не могут быть ни назначены для копирования, ни для перемещения, можно ли их уничтожить и создать из других? Если это так, чей распределитель я должен использовать?

Ответы на вопрос(2)

Ваш ответ на вопрос