Namespaces
Variants

std::polymorphic<T, Allocator>:: operator=

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
constexpr polymorphic & operator = ( const polymorphic & other ) ;
(1) (desde C++26)
constexpr polymorphic & operator = ( polymorphic && other )
noexcept ( /* ver más abajo */ ) ;
(2) (desde C++26)

Reemplaza el contenido de * this con el contenido de other .

Sea traits como std:: allocator_traits < Allocator > :

1) Si std:: addressof ( other ) == this es true , no hace nada. De lo contrario, sea need_update igual a traits :: propagate_on_container_copy_assignment :: value :
  1. Si other no tiene valor, procede al siguiente paso. De lo contrario, construye un nuevo objeto poseído en * this usando traits :: construct con * other como argumento, usando el asignador update_alloc ? other. alloc : alloc .
  2. El objeto previamente poseído en * this (si existe) es destruido usando traits :: destroy y luego la memoria es desasignada.
Después de actualizar el objeto propiedad de * this , si need_update es true , alloc se reemplaza con una copia de other. alloc .
Si T es un tipo incompleto , el programa está mal formado.
2) Si std:: addressof ( other ) == this es true , no hace nada. De lo contrario, sea need_update igual a traits :: propagate_on_container_move_assignment :: value :
  • Si alloc == other. alloc es true , intercambia los objetos poseídos en * this y other ; el objeto poseído en other (si existe) es entonces destruido usando traits :: destroy y luego la memoria es desasignada.
  • De lo contrario:
  1. Si other no tiene valor, procede al siguiente paso. De lo contrario, construye un nuevo objeto poseído en * this usando traits :: construct con std :: move ( * other ) como argumento, usando el asignador update_alloc ? other. alloc : alloc .
  2. El objeto previamente poseído en * this (si existe) es destruido usando traits :: destroy y luego la memoria es desasignada.
Después de actualizar los objetos poseídos por * this y other , si need_update es true , alloc se reemplaza con una copia de other. alloc .
Si se satisfacen todas las siguientes condiciones, el programa está mal formado:

Contenidos

Parámetros

otro - otro objeto polymorphic cuyo valor poseído (si existe) se utiliza para la asignación

Valor de retorno

* this

Excepciones

1) Si se lanza alguna excepción, no hay efectos sobre * this .
2) Si se lanza alguna excepción, no hay efectos sobre * this o other .
noexcept especificación:
noexcept ( std:: allocator_traits < Allocator > ::

propagate_on_container_move_assignment :: value

|| std:: allocator_traits < Allocator > :: is_always_equal :: value )

Ejemplo