Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > operator = для объекта, содержащего CStdioFile |
Автор: 5kill 16.6.2011, 11:15 |
Приветствую всех. Возникла проблема с реализацией оператора присваивания для класса, содержащего CStdioFile. Получить копию CStdioFile мне не удалось... метод Duplicate() в нем не реализован почему-то. Попробовал вместо CStdioFile хранить ссылку, но тогда после копирования, когда удаляется временный объект вызывается деструктор, который благополучно закрывает файл по ссылке. Подскажите, плз, как обойти эти трудности. |
Автор: Alca 16.6.2011, 13:12 |
Шеф, где код? |
Автор: 5kill 16.6.2011, 14:55 | ||
Вот деструктор и оператор копирования для варианта со ссылкой на CStdioFile:
|
Автор: borisbn 16.6.2011, 15:40 | ||||
Думаю лучше всего хранить shared_ptr< CStdioFile * >
, а в деструкторе убрать
|
Автор: Alca 16.6.2011, 18:19 | ||
http://www.cs.caltech.edu/courses/cs11/material/cpp/donnie/cpp-ops.html
|
Автор: maxim1000 16.6.2011, 23:32 |
есть подозрение, что наличие оператора присваивания для объекта, содержащего обхект для чтения из файла, семантически некорректно технические трудности, возникающие при его реализации - всего лишь следствие для того, чтобы дать полезный совет, было бы неплохо увидеть: 1. описание семантики класса, для которого понадобился operator= 2. описание причин, по которым он понадобился |
Автор: 5kill 17.6.2011, 08:40 |
Полностью согласен с тем что архитектура такой реализации не блещет изяществом. Однако в силу специфики использования данного класса это наиболее разумный по соотношению затрат к результату вариант. В итоге я отказался от оператора присваивания, использовав ссылки на объекты этого класса. Спасибо всем за помощь, многие советы были полезными. |