Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Идиома copy-and-swap15 мая 2011Оглавление: 1. Идиома copy-and-swap 2. Другие операции это идиома языка программирования C++, позволяющая разрабатывать устойчивые к исключениям операторы присваивания. Идиома базируется на идиоме Resource Acquisition Is Initialization. Идиома предполагает реализацию следующих функций-членов класса:
Пример:
class Copyable {
public:
Copyable& operator= {
Copyable tmp;
this->swap;
return *this;
}
void swap throw;
};
Устойчивость к исключениям заключается в том, что в операторе присваивания Оператор присваивания сначала пытается захватить ресурс «временная копия присваиваемого объекта» и в случае успеха меняет его содержимое с содержимым текущего объекта. Поскольку метод Приведённая выше реализация также устойчива к присваиваниям объекта самому себе, однако содержит издержки, связанные с тем, что временная копия в этом случае тоже будет создаваться. Исключить издержки можно дополнительной проверкой:
class Copyable {
public:
Copyable& operator= {
if
Copyable.swap;
return *this;
}
void swap throw;
};
Многие контейнеры и алгоритмы стандартной библиотеки C++ и библиотеки STL предполагают наличие устойчивого к исключениям оператора присваивания, но без использования идиомы copy-and-swap иногда довольно сложно реализовать такой оператор присваивания для классов, содержащих, например, указатели на экземпляры других классов. Просмотров: 1906
|