Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
skill_
0 / 0 / 0
Регистрация: 02.04.2010
Сообщений: 23
#1

operator = для объекта, содержащего CStdioFile - C++

16.06.2011, 12:16. Просмотров 507. Ответов 7
Метки нет (Все метки)

Приветствую всех.

Возникла проблема с реализацией оператора присваивания для класса, содержащего CStdioFile.
Получить копию CStdioFile мне не удалось... метод Duplicate() в нем не реализован почему-то.
Попробовал вместо CStdioFile хранить ссылку, но тогда после копирования, когда удаляется временный объект вызывается деструктор, который благополучно закрывает файл по ссылке.

Подскажите, плз, как обойти эти трудности.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
16.06.2011, 12:32     operator = для объекта, содержащего CStdioFile #2
skill_, можно ввести счетчик объектов, которые указывают на данный файл и следить, пока не будет удален последний объект, указывающий на данный файл.
sandye51
программист С++
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.06.2011, 14:13     operator = для объекта, содержащего CStdioFile #3
skill_, статические переменные юзай
skill_
0 / 0 / 0
Регистрация: 02.04.2010
Сообщений: 23
16.06.2011, 15:19  [ТС]     operator = для объекта, содержащего CStdioFile #4
sandye51
Да, а можно вообще на C# программы писать, там таких проблем нету.

insolent
А можно поподробнее, как это сделать?
sandye51
программист С++
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.06.2011, 15:26     operator = для объекта, содержащего CStdioFile #5
skill_, а в с++ есть проблемы чтоли? статические переменные с++ тоже поддерживает, если ты не знал

зачем какие-то счетчики ссылок, когда статические переменные здесь самое то
skill_
0 / 0 / 0
Регистрация: 02.04.2010
Сообщений: 23
16.06.2011, 15:48  [ТС]     operator = для объекта, содержащего CStdioFile #6
Статические переменные здесь не самое то. Хочется услышать ответы по существу.
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
16.06.2011, 17:15     operator = для объекта, содержащего CStdioFile #7
skill_, и чем же вас статические переменные не устроили? Вы так лихо этот вариант отмели, что создаётся впечатление, будто вы даже и не поняли, что именно вам посоветовали.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2011, 09:41     operator = для объекта, содержащего CStdioFile
Еще ссылки по теме:

Operator< для класса C++
C++ Перегрузка operator< для двух экземпляров класса отрезок
Перегрузка operator>> для производного класса C++
C++ Перегрузить operator<<() для шаблонного класса (перегрузка оператора вывода)
C++ Реализовать перегрузку operator+() для пользователского класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
skill_
0 / 0 / 0
Регистрация: 02.04.2010
Сообщений: 23
17.06.2011, 09:41  [ТС]     operator = для объекта, содержащего CStdioFile #8
Да нет, я понял, но мне нужно использовать динамический массив таких объектов, и создавать(или переинициализировать в случае указателей) статические члены - уж очень не удобно.

Добавлено через 15 часов 54 минуты
Полностью согласен с тем что архитектура такой реализации не блещет изяществом.
Однако в силу специфики использования данного класса это наиболее разумный по соотношению затрат к результату вариант.

В итоге я отказался от оператора присваивания, использовав ссылки на объекты этого класса.
Спасибо всем за помощь, многие советы были полезными.
Yandex
Объявления
17.06.2011, 09:41     operator = для объекта, содержащего CStdioFile
Ответ Создать тему
Опции темы

Текущее время: 14:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru