Copy and swap
Назначение
Идиома Copy and swap является одним из подходов к реализации операции присваивания для объектов класса. Она предлагает эффективный способ обеспечить безопасную и эффективную реализацию этой операции. Используется для реализации оператора присваивания, конструктора копирования, обмена значениями.
Решаемые задачи
Безопасное присваивание объектов
При изменении состояния одного или нескольких объектов на любом этапе модификации может возникнуть исключительная ситуация, приводящая к неправильному освобождению ресурсов, если произошла ошибка после выделения памяти для нового объекта. Идиома Copy and swap обеспечитвает безопасность операции присваивания. Она позволяет избежать проблем с самоприсваиванием и гарантировать освобождение ресурсов.
Общая реализация на языке C++
Реализация идиомы заключается в создании функции swap(), которая:
Создает копию объектов;
Изменяет копию. Оригинальные объекты остаются нетронутыми;
Если все изменения прошли успешно – происходит замена оригинального объекта измененной копией. Если же при изменении копии на каком-то этапе появилась ошибка, то оригинальный объект не меняется.
В данном примере для обмена значениями реализована функция swap(). Благодаря этому удается избежать утечки памяти в случае выброса исключения.
Last updated
Was this helpful?