Copy-and-swapИдиома copy-and-swap — это идиома языка программирования C++, позволяющая разрабатывать устойчивые к исключениям операторы присваивания. Идиома базируется на идиоме «Получение ресурса есть инициализация». Идиома предполагает реализацию следующих функций-членов класса:
Пример: class Copyable {
public:
Copyable& operator=(const Copyable &_v) {
Copyable tmp(_v);
this->swap(tmp);
return *this;
}
void swap(Copyable &_v) noexcept;
};
Устойчивость к исключениям заключается в том, что в операторе присваивания Оператор присваивания сначала пытается захватить ресурс «временная копия присваиваемого объекта» ( Приведённая выше реализация также устойчива к присваиваниям объекта самому себе ( class Copyable {
public:
Copyable& operator=(const Copyable &_v) {
if(this != &_v)
Copyable(_v).swap(*this);
return *this;
}
void swap(Copyable &_v) noexcept;
};
Многие контейнеры и алгоритмы стандартной библиотеки C++ и библиотеки STL предполагают наличие устойчивого к исключениям оператора присваивания, но без использования идиомы copy-and-swap иногда довольно сложно реализовать такой оператор присваивания для классов, содержащих, например, указатели на экземпляры других классов. Другие операцииИмея функцию-член Для этого сначала делают копию существующего объекта, выполняют над копией необходимые модификации, а потом меняют
См. также
|
Portal di Ensiklopedia Dunia