Como a atribuição de contêiner com reconhecimento de alocador é implementada?

Por exemplo, destd :: deque :: operator = na referência C ++:
(1) Cópia de atribuição (const std :: deque e outros)

Substitui o conteúdo por uma cópia do conteúdo de outro.
Se std :: assignator_traits :: propagate_on_container_copy_assignment () for true, o alocador de destino será substituído por uma cópia do alocador de origem. Se o alocador de destino e de origem não comparar igual, o alocador de destino (* this) é usado para desalocar a memória, o alocador de outro é usado para alocá-lo antes de copiar os elementos.

E sethis->get_allocator() == other.get_allocator(), Eu posso simplesmente destruir e desalocarthis'elementos, se necessário, ou aloque e construa elementos, se necessário, ou copie os elementos deother para*this se necessário.
Mas e se não? A citação acima significa que não posso copiar e atribuir os elementos, portanto, tenho que destruir e desalocar TODOS os elementos primeiro, usandothis->get_allocator()e aloque e construa os elementos, usandoother.get_allocator()?
Mas se for esse o caso, por que devo usarother.get_allocator() para a alocação?
Isso não causará algum erro de execução mais tarde, comothis não desalocará a memória corretamente?

(2) Mover atribuição (std :: deque && other)

Substitui o conteúdo pelo de outro usando a semântica de movimentação (ou seja, os dados em outro são movidos de outro para este contêiner). outro está em um estado válido, mas não especificado posteriormente. Se std :: assignator_traits :: propagate_on_container_move_assignment () for true, o alocador de destino será substituído por uma cópia do alocador de origem. Se for falso e os alocadores de origem e de destino não forem iguais, o destino não poderá se apropriar da memória de origem e deverá atribuir cada elemento individualmente, alocando memória adicional usando seu próprio alocador, conforme necessário. De qualquer forma, todos os elementos originalmente presentes em * isto são destruídos ou substituídos por atribuição de movimento elementwise.

E sethis->get_allocator() == other.get_allocator(), essa é uma tarefa fácil.
Mas, se não, as mesmas perguntas acima seguem, exceto que, neste caso, a atribuição de movimentação é usada.

Nos dois casos, tenho uma pergunta adicional.
Se os elementos não podem ser atribuídos a cópia ou a movimentação, é correto destruí-lo e construir a partir de outros? Se for, de quem devo usar o alocador?

questionAnswers(2)

yourAnswerToTheQuestion