Spec-Zone.ru › C++

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.

1) Оператор копирующего присваивания. Заменяет содержимое копией содержимого other.
Если std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value является true, аллокатор *this заменяется копией аллокатора other. Если аллокатор *this после присваивания будет отличаться от своего старого значения, старый аллокатор используется для освобождения памяти, затем новый аллокатор используется для её выделения перед копированием элементов. В противном случае, память, принадлежащая *this, может быть повторно использована, если это возможно.
2) Оператор перемещающего присваивания. Заменяет содержимое содержимым 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

Сложность

1) Линейная относительно размера *this и other.
2) Линейная относительно размера *this, если аллокаторы не равны и не передаются, в противном случае линейная относительно размера *this и other.

Исключение

1) Может выбросить исключение, определённое реализацией.
2)
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API