OLD-idmessage-129336

#1944255
-sc-
Участник

[quote name='Brain'] … Почему объявляется структура а не класс?…[/quote]Кроме, как было замечено, private/public разницы никакой. Но иногда, когда класс маленький и выполняет какие-то вспомогательные действия, бывает удобно иметь прямой доступ (без методов) к его нескольким членам. Здесь больше дело вкуса. Для кого-то это может быть неприемлемо. Это также может быть записано в стандарте кодирования данного предприятия.[quote name='Brain'] … почему вызывается “системный” вызов open? А не используется fstream?…[/quote]В данном примере я просто пытался показать подход к управлению ресурсами в с++ (память, дескрипторы (файлов, всякие brush, pen и т.д.), соединения с БД, сетевые и т.д.) Их освобождение, если надо, может быть автоматическим. Реализовать это на с++ совсем не сложно. И это не открытие, а обычная практика (RAII – Resource Acquisition Is Initialization).Данный пример конечно не стоит подражания и заслуживает критики)) Есть более достойные подражания авторы и примеры))1) Старуструп, Язык С++, 14.4.1 Управление ресурсами. Использование констр. и дестр.2) Саттер “C++ RAII compared with Java Dispose pattern”http://blogs.msdn.com/hsutter/archive/2004/07/31/203137.aspx3) google RAII ))Да, у Саттера, приводится эквивалентное для с# решение (я как-то и забыл об этом)):using(A obj = new A()){   obj.DoSomething();}Это разворачивается в try/finally и в секции finally вызовется A.Dispose() (примерно так)Все остальное согласно паттерну Dispose. Ну что ж, не все так плохо))Насчет open. Иногда можно решить проблему только системыными вызовами. Например у нас была кроссплатформенная обертка типа ИмяПродукта::CFile. И там нужно было добиться одинакового поведения в винде, солярке и линуксе. В винде есть возможность открыть файл в эксклюзивном режиме (именно из-за этого этот класс и нужен был), а солярке этого режима или не было, или работал он не так как в винде. Проблему решили то ли с помощью мьютекса, то ли семафора (они у нас тоже были кросс-платформенно обернуты)), не помню. Но в данном случае использовали именно системные вызовы. Все зависит от конкретной задачи и чем больше возможности выбора, тем эффективнее решается задача (ну вот, очередная банальность))PS Все вышесказанное является имхой и может не совпадать с имхами других людей)),и естественно может быть подвергнуто конструктивной критике))