std::basic_stacktrace<Allocator>::operator=
basic_stacktrace& operator=( const basic_stacktrace& other ); | (1) | (since C++23) |
basic_stacktrace& operator=( basic_stacktrace&& other )
noexcept(/* see below */);
| (2) | (since 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 issue 2321.
Пример
См. также
создаёт новый basic_stacktrace (публичный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/basic_stacktrace/operator%3D