std::basic_stacktrace<Allocator>::operator=
basic_stacktrace& operator=( const basic_stacktrace& other ); | (1) | (начиная с C++23) |
basic_stacktrace& operator=( basic_stacktrace&& other )
noexcept(/* see below */);
| (2) | (начиная с C++23) |
Заменяет содержимое basic_stacktrace.
other.std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value является true, аллокатор *this заменяется копией аллокатора other. Если после присваивания аллокаторы *this и его прежнее значение не равны, старая память освобождается с помощью старого аллокатора, затем новый аллокатор используется для её выделения перед копированием элементов. В противном случае память, принадлежащая *this, по возможности может быть использована повторно. other, используя семантику перемещения (т. е. данные в other перемещаются из other в *this). После этого other находится в допустимом, но неуточнённом состоянии.std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value является true, аллокатор *this заменяется копией аллокатора other. Если он является false, а аллокаторы *this и other не равны, *this не может получить владение памятью, принадлежащей other, и должен присваивать элементы по одному, при необходимости выделяя дополнительную память с помощью собственного аллокатора.В любом случае элементы стека трассировки, изначально принадлежащие *this, могут быть уничтожены или заменены поэлементным присваиванием.
При сбое выделения памяти *this может быть очищен, если реализация усиливает спецификацию исключений.
Параметры
| other | - | другой basic_stacktrace, используемый в качестве источника |
Возвращаемое значение
*this
Сложность
*this и other.*this, если аллокаторы не равны и распространение аллокатора не выполняется; в этом случае сложность линейная относительно размера *this и other.Исключения
noexcept спецификация: noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value || std::allocator_traits<Allocator>::is_always_equal::value)
Примечания
После перемещающего присваивания контейнера (перегрузка (2)), если только поэлементное перемещающее присваивание не требуется из-за несовместимых аллокаторов, ссылки, указатели и итераторы, изначально указывавшие на элементы в other, остаются действительными, но теперь указывают на элементы в *this. Действующий стандарт гарантирует это общим положением в [container.reqmts]/67; также рассматривается возможность более прямой гарантии в рамках предложения LWG 2321.
Пример
См. также
создаёт новый basic_stacktrace (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/basic_stacktrace/operator%3D