std::polymorphic<T, Allocator>:: operator=
From cppreference.net
<
cpp
|
memory
|
polymorphic
|
constexpr
polymorphic
&
operator
=
(
const
polymorphic
&
other
)
;
|
(1) | (since C++26) |
|
constexpr
polymorphic
&
operator
=
(
polymorphic
&&
other
)
noexcept ( /* see below */ ) ; |
(2) | (since C++26) |
Replaces contents of * this with the contents of other .
Let
traits
be
std::
allocator_traits
<
Allocator
>
:
1)
If
std::
addressof
(
other
)
==
this
is
true
, does nothing. Otherwise, let
need_update
be
traits
::
propagate_on_container_copy_assignment
::
value
:
-
If
other
is valueless, proceeds to the next step. Otherwise, constructs a new owned object in
*
this
using
traits
::
construct
with
*
other
as the argument, using the allocator
update_alloc
?
other.
alloc:alloc. - The previously owned object in * this (if any) is destroyed using traits :: destroy and then the storage is deallocated.
After updating the object owned by
*
this
, if
need_update
is
true
,
alloc
is replaced with a copy of
other.
alloc
.
2)
If
std::
addressof
(
other
)
==
this
is
true
, does nothing. Otherwise, let
need_update
be
traits
::
propagate_on_container_move_assignment
::
value
:
-
If
alloc== other.allocis true , swaps the owned objects in * this and other ; the owned object in other (if any) is then destroyed using traits :: destroy and then the storage is deallocated. - Otherwise:
-
-
If
other
is valueless, proceeds to the next step. Otherwise, constructs a new owned object in
*
this
using
traits
::
construct
with
std
::
move
(
*
other
)
as the argument, using the allocator
update_alloc
?
other.
alloc:alloc. - The previously owned object in * this (if any) is destroyed using traits :: destroy and then the storage is deallocated.
-
If
other
is valueless, proceeds to the next step. Otherwise, constructs a new owned object in
*
this
using
traits
::
construct
with
std
::
move
(
*
other
)
as the argument, using the allocator
update_alloc
?
other.
After updating the objects owned by
*
this
and
other
, if
need_update
is
true
,
alloc
is replaced with a copy of
other.
alloc
.
If all following conditions are satisfied, the program is ill-formed:
- std:: allocator_traits < Allocator > :: is_always_equal :: value is false .
-
Tis an incomplete type.
Contents |
Parameters
| other | - |
another
polymorphic
object whose owned value (if exists) is used for assignment
|
Return value
* this
Exceptions
1)
If any exception is thrown, there are no effects on
*
this
.
2)
If any exception is thrown, there are no effects on
*
this
or
other
.
noexcept
specification:
noexcept
(
std::
allocator_traits
<
Allocator
>
::
propagate_on_container_move_assignment
::
value
Example
|
This section is incomplete
Reason: no example |