Namespaces
Variants

std::basic_stacktrace<Allocator>:: operator=

From cppreference.net
basic_stacktrace & operator = ( const basic_stacktrace & other ) ;
(1) (начиная с C++23)
basic_stacktrace & operator = ( basic_stacktrace && other )
noexcept ( /* см. ниже */ ) ;
(2) (начиная с 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 может быть установлен в пустое значение при ошибке выделения памяти, если реализация усиливает спецификацию исключений.

Содержание

Параметры

другой - другой 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
(публичная функция-член)