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) (depuis C++26)
constexpr polymorphic & operator = ( polymorphic && other )
noexcept ( /* voir ci-dessous */ ) ;
(2) (depuis C++26)

Remplace le contenu de * this par le contenu de other .

Soit traits l'expression std:: allocator_traits < Allocator > :

1) Si std:: addressof ( other ) == this est true , ne fait rien. Sinon, soit need_update la valeur de traits :: propagate_on_container_copy_assignment :: value :
  1. Si other est sans valeur, passe à l'étape suivante. Sinon, construit un nouvel objet possédé dans * this en utilisant traits :: construct avec * other comme argument, en utilisant l'allocateur update_alloc ? other. alloc : alloc .
  2. L'objet précédemment possédé dans * this (s'il existe) est détruit en utilisant traits :: destroy puis la mémoire est désallouée.
Après la mise à jour de l'objet détenu par * this , si need_update est true , alloc est remplacé par une copie de other. alloc .
Si T est un type incomplet , le programme est mal formé.
2) Si std:: addressof ( other ) == this est true , ne fait rien. Sinon, soit need_update égal à traits :: propagate_on_container_move_assignment :: value :
  • Si alloc == other. alloc est true , échange les objets possédés dans * this et other ; l'objet possédé dans other (s'il existe) est ensuite détruit en utilisant traits :: destroy puis la mémoire est désallouée.
  • Sinon :
  1. Si other est sans valeur, passe à l'étape suivante. Sinon, construit un nouvel objet possédé dans * this en utilisant traits :: construct avec std :: move ( * other ) comme argument, en utilisant l'allocateur update_alloc ? other. alloc : alloc .
  2. L'objet précédemment possédé dans * this (s'il existe) est détruit en utilisant traits :: destroy puis la mémoire est désallouée.
Après la mise à jour des objets détenus par * this et other , si need_update est true , alloc est remplacé par une copie de other. alloc .
Si toutes les conditions suivantes sont satisfaites, le programme est mal formé :

Table des matières

Paramètres

autre - un autre polymorphic objet dont la valeur possédée (si elle existe) est utilisée pour l'affectation

Valeur de retour

* this

Exceptions

1) Si une exception est levée, il n'y a aucun effet sur * this .
2) Si une exception est levée, il n'y a aucun effet sur * this ou other .
noexcept spécification :
noexcept ( std:: allocator_traits < Allocator > ::

propagate_on_container_move_assignment :: value

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

Exemple