26:45 объяснение с точностью до наоборот: сначала вызвался деструктор A, потом B
@siarheimarozau67632 жыл бұрын
когда я создаю объект с пом. конструктора initializer_list то когда приходит очередь удаления этого объекта деструктором выходит ошибка: CRT detected that application wrote to memory after and of heap buffer.
@siarheimarozau67632 жыл бұрын
Разобрался !
@vanyakhodor33873 жыл бұрын
Кстати вместо copy-and-swap и повторения конструктора копирования можно использовать placement new: new(this) String(s).
@vanyakhodor33873 жыл бұрын
@@mesyarik а почему явный вызов деструктора приводит к уб?
@vanyakhodor33873 жыл бұрын
@@mesyarikи правда упустил. Благодарен.
@ddvamp3 жыл бұрын
@@vanyakhodor3387 К несчастью, вам ответили верно (про использование объекта после окончания его времени жизни), но в данном контексте этот ответ неуместен (так как placement new от this использует не объект, а хранилище, которое объект занимал) . eel.is/c++draft/basic.life#example-2 стандарт описывает по каким правилам можно работать с "удалёнными объектами" Огромный недостаток этого способа в том, что оператор присваивания небезопасен с точки зрения исключения, в то время как swap идиома даёт строгую гарантию безопасности.