¿Cómo se implementa la asignación de contenedor compatible con el asignador?

Por ejemplo, destd :: deque :: operator = en C ++ Referencia:
(1) Asignación de copia (const std :: deque y otros)

Reemplaza los contenidos con una copia de los contenidos de otros.
Si std :: allocator_traits :: propagate_on_container_copy_assignment () es verdadero, el asignador de destino se reemplaza por una copia del asignador de origen. Si el objetivo y los asignadores de origen no se comparan igual, el asignador de destino (* este) se usa para desasignar la memoria, luego se usa el de otro para asignarlo antes de copiar los elementos.

Sithis->get_allocator() == other.get_allocator(), Simplemente puedo destruir y desasignarthis'elementos si es necesario, o asignar y construir elementos si es necesario, o copiar y asignar los elementos deother a*this si es necesario.
¿Pero y si no? ¿La cita anterior significa que no puedo copiar y asignar los elementos, por lo que primero tengo que destruir y desasignar TODOS los elementos, usandothis->get_allocator(), y luego asignar y construir los elementos, utilizandoother.get_allocator()?
Pero si ese es el caso, ¿por qué debería usarother.get_allocator() para la asignación?
¿No causará algún error de tiempo de ejecución más tarde, ya quethis no desasignará la memoria correctamente?

(2) Asignación de movimiento (std :: deque y otros)

Reemplaza los contenidos con los de otros usando semántica de movimiento (es decir, los datos en otro se mueven de otro a este contenedor). otro está en un estado válido pero no especificado después. Si std :: allocator_traits :: propagate_on_container_move_assignment () es verdadero, el asignador de destino se reemplaza por una copia del asignador de origen. Si es falso y los asignadores de origen y destino no se comparan iguales, el objetivo no puede tomar posesión de la memoria de origen y debe mover-asignar cada elemento individualmente, asignando memoria adicional utilizando su propio asignador según sea necesario. En cualquier caso, todos los elementos originalmente presentes en * esto son destruidos o reemplazados por la asignación de movimiento por elementos.

Sithis->get_allocator() == other.get_allocator(), esta es una tarea fácil.
Pero si no, se siguen las mismas preguntas anteriores, excepto en este caso la asignación de movimiento.

En ambos casos, tengo una pregunta adicional.
Si los elementos no se pueden asignar ni copiar ni mover, ¿está bien destruirlos y construir a partir de otros? Si es así, ¿qué asignador debo usar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta