std::polymorphic<T, Allocator>:: operator=
From cppreference.net
<
cpp
|
memory
|
polymorphic
|
constexpr
polymorphic
&
operator
=
(
const
polymorphic
&
other
)
;
|
(1) | (с C++26) |
|
constexpr
polymorphic
&
operator
=
(
polymorphic
&&
other
)
noexcept ( /* см. ниже */ ) ; |
(2) | (с C++26) |
Заменяет содержимое * this содержимым other .
Пусть
traits
будет
std::
allocator_traits
<
Allocator
>
:
1)
Если
std::
addressof
(
other
)
==
this
равно
true
, ничего не делает. В противном случае, пусть
need_update
будет
traits
::
propagate_on_container_copy_assignment
::
value
:
-
Если
other
не содержит значения, переходит к следующему шагу. В противном случае, конструирует новый управляемый объект в
*
this
используя
traits
::
construct
с
*
other
в качестве аргумента, используя аллокатор
update_alloc
?
other.
alloc:alloc. - Предыдущий управляемый объект в * this (если существует) уничтожается с использованием traits :: destroy , после чего память освобождается.
После обновления объекта, принадлежащего
*
this
, если
need_update
имеет значение
true
,
alloc
заменяется на копию
other.
alloc
.
2)
Если
std::
addressof
(
other
)
==
this
равно
true
, ничего не делает. В противном случае, пусть
need_update
будет
traits
::
propagate_on_container_move_assignment
::
value
:
-
Если
alloc== other.allocравно true , обменивает владеемые объекты в * this и other ; владеемый объект в other (если есть) затем уничтожается с использованием traits :: destroy и затем память освобождается. - В противном случае:
-
-
Если
other
не содержит значения, переходит к следующему шагу. В противном случае, конструирует новый владеемый объект в
*
this
с использованием
traits
::
construct
с аргументом
std
::
move
(
*
other
)
, используя аллокатор
update_alloc
?
other.
alloc:alloc. - Предыдущий владеемый объект в * this (если есть) уничтожается с использованием traits :: destroy и затем память освобождается.
-
Если
other
не содержит значения, переходит к следующему шагу. В противном случае, конструирует новый владеемый объект в
*
this
с использованием
traits
::
construct
с аргументом
std
::
move
(
*
other
)
, используя аллокатор
update_alloc
?
other.
После обновления объектов, принадлежащих
*
this
и
other
, если
need_update
равно
true
,
alloc
заменяется копией
other.
alloc
.
Если выполняются все следующие условия, программа является некорректной:
- std:: allocator_traits < Allocator > :: is_always_equal :: value равно false .
-
Tявляется неполным типом.
Содержание |
Параметры
| другой | - |
другой
polymorphic
объект, чьё принадлежащее значение (если существует) используется для присваивания
|
Возвращаемое значение
* this
Исключения
1)
Если выбрасывается любое исключение, это не оказывает никакого влияния на
*
this
.
2)
Если выбрасывается любое исключение, это не оказывает никакого влияния на
*
this
или
other
.
noexcept
спецификация:
noexcept
(
std::
allocator_traits
<
Allocator
>
::
propagate_on_container_move_assignment
::
value
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |