std::basic_stacktrace<Allocator>::operator=
basic_stacktrace& operator=( const basic_stacktrace& other ); |
(1) | (начиная с C++23) |
basic_stacktrace& operator=( basic_stacktrace&& other ) noexcept(/* смотрите ниже */); |
(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(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 функция-элемент) |