Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Идиома 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 иногда довольно сложно реализовать такой оператор присваивания для классов, содержащих, например, указатели на экземпляры других классов. Просмотров: 1703
|