Пространства имён
Варианты
Действия

std::basic_stacktrace<Allocator>::operator=

Материал из cppreference.com
 
 
Библиотека диагностики
Обработка исключений
Сбои обработки исключений
(до C++17*)
(до C++17*)
(C++11)(до C++17*)    
(до C++17*)
Коды ошибок
Коды ошибок
Категории исключений
(ТС TM)
Поддержка системных ошибок
(C++11)
(C++11)
Утверждения
Трассировка стека
 
 
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 при сбое выделения может остаться пустым, если реализация усиливает спецификацию исключений.

Содержание

[править]Параметры

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 проблема 2321.

[править]Пример

[править]Смотрите также

создаёт новый basic_stacktrace
(public функция-элемент)[править]
close