Move semantics в C++11 и STL-контейнеры

Эта небольшая заметка о том, как с приходом нового стандарта C++11 изменились требования стандартных контейнеров к своим элементам. В C++98 от элемента контейнера требовалось, по сути, наличие «разумных» конструктора копирования и оператора присваивания. Если, например, объект вашего класса владеет каким-либо ресурсом, копирование обычно становится невозможным (по крайней мере, без «глубокого» копирования ресурса). В качестве примера давайте рассмотрим следующий класс-обертку вокруг FILE*, написанную на C++98: class File { FILE* handle; public: File (const char* filename) { if (!(handle = fopen (filename, «r»))) throw std: runtime_error («blah blah blah»); } ~File () { if (handle) fclose (handle); } // … private: File (const File&); //запретить копирование void operator=(const File&); //запретить присваивание }; Читать дальше →

© Habrahabr.ru