
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (17) « Первая ... 2 3 [4] 5 6 ... 16 17 все ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
Программирование на ассемблере позволяет не познакомиться с аппаратной составляющей, а потонуть в ней ![]() |
Сообщ.
#47
,
|
|
|
![]() |
Сообщ.
#48
,
|
|
Цитата sergioK @ и деструктор мне сам вызовет close ? в пыхе да ![]() |
Сообщ.
#49
,
|
|
|
Цитата sergioK @ Это Си. Там нет деструкторов. ![]() ![]() std::ifstream f("c:\\test.txt"); Вот тут вызовется деструктор сам, да. Для FILE* и fopen как-то так можно ![]() ![]() auto f = std::shared_ptr<FILE>(fopen("c:\\test.txt", "r"), fclose)); |
Сообщ.
#50
,
|
|
|
Есть еще __attribute__((cleanup(fclose))), но это тоже GCC'изм
|
Сообщ.
#51
,
|
|
|
Цитата D_KEY @ ![]() ![]() std::ifstream f("c:\\test.txt"); Вот тут вызовется деструктор сам, да. Для FILE* и fopen как-то так можно ![]() ![]() auto f = std::shared_ptr<FILE>(fopen("c:\\test.txt", "r"), fclose)); Праильно потому что в деструкторе класса написали вызов метода close , хотя это IMHO момент спорный , буквально вчера была ситуация где закрытие происходит при некоем событии, уже после разрушения обьекта да а если обьект живет а ресурс уже не нужен ? Или как у меня бывало, есть у тебя ресурс например некий SAPConnector c методами connect и disconnect откуда твой деструктор сам узнает что нужно вызвать именно disconnect ? почему не сlose или destroy ? Именно по это причине в жаве вернулись к чистому С IMHO Вообще Я изначально сказал что открытие и закрытие должно происходить про принципу before/after , т,е в том же методе , это и есть open/close principle, ЯП тут не причем |
Сообщ.
#52
,
|
|
|
Цитата sergioK @ Вообще, при завершении программы все оставшиеся открытыми к тому времени файлы будут закрыты. Но не раньше. Так что обычно всё делается ручками.и деструктор мне сам вызовет close ? Перехват malloc мало что даёт. Разве что позволяет контролировать память. А exit вообще не из этой оперы. |
![]() |
Сообщ.
#53
,
|
|
Цитата sergioK @ Нормальные люди делают из ресурса объект. С конструктором и деструктором. И далее работают не с ресурсами. Не нормальные - выдумывают костыли, издалека похожие на конструктор и деструктор. Праильно потому что в деструкторе класса написали вызов метода close , хотя это IMHO момент спорный , буквально вчера была ситуация где закрытие происходит при некоем событии, уже после разрушения обьекта да а если обьект живет а ресурс уже не нужен ? |
![]() |
Сообщ.
#54
,
|
|
Цитата sergioK @ да а если обьект живет а ресурс уже не нужен ? Тогда закрыть руками, как это ни странно ![]() |
Сообщ.
#55
,
|
|
|
Цитата amk @ Цитата sergioK @ Вообще, при завершении программы все оставшиеся открытыми к тому времени файлы будут закрыты. Но не раньше. Так что обычно всё делается ручками.и деструктор мне сам вызовет close ? Перехват malloc мало что даёт. Разве что позволяет контролировать память. А exit вообще не из этой оперы. Так это ось вызовет , а ее нагружать не хочеться , Qraizer Обьект или не обьект метод закрывающий ресурс ты должен вызвать сам , в деструкторе или нет Я говорю о has a в случае когда обьект не уничтожаеться, ты о is a что лучше зависит от задачи , Меня пытаються убедить в чудо компайлере который догадаеться что у ресурса есть метод закрывающий ресурс, и сможет его вызвать |
Сообщ.
#56
,
|
|
|
Цитата sergioK @ Именно по это причине в жаве вернулись к чистому С IMHO Ну не думаю, что создатели Java думали только о деструкторах Цитата sergioK @ Или как у меня бывало, есть у тебя ресурс например некий SAPConnector c методами connect и disconnect откуда твой деструктор сам узнает что нужно вызвать именно disconnect ? почему не сlose или destroy ? В Сишке это рулится соглашениями об именовании функций. Я вот например называю все "деструкторы" <objname>_destroy ![]() |
![]() |
Сообщ.
#57
,
|
|
Цитата sergioK @ Меня пытаються убедить в чудо компайлере который догадаеться что у ресурса есть метод закрывающий ресурс, и сможет его вызвать Вообще-то это ты высказал мысль, что коймпайлер должен кидать warning в том случае, если ресурс был открыт, но не был закрыт.... |
![]() |
Сообщ.
#58
,
|
|
Цитата sergioK @ Меня пытаються убедить в чудо компайлере который догадаеться что у ресурса есть метод закрывающий ресурс, и сможет его вызвать О чудо-компиляторах, догадывающихся о существовании метода и о том, что его забыли вызвать, рассказываешь ты ![]() |
Сообщ.
#59
,
|
|
|
Цитата Fester @ Цитата sergioK @ Меня пытаються убедить в чудо компайлере который догадаеться что у ресурса есть метод закрывающий ресурс, и сможет его вызвать Вообще-то это ты высказал мысль, что коймпайлер должен кидать warning в том случае, если ресурс был открыт, но не был закрыт.... если не компайлер то IDE, look attachment, с опцией warning as error хотя он тоже не все могущь Цитата В Сишке это рулится соглашениями об именовании функций. Я вот например называю все "деструкторы" <objname>_destroy т.е т.е строишь interface, это для тех у кого в си нету классов ![]() |
![]() |
Сообщ.
#60
,
|
|
Цитата sergioK @ если не компайлер то IDE, look attachment, с опцией warning as error хотя он тоже не все могущь Warning as error - опция именно компилятора. А то, о чем ты говоришь - статический анализ. И то - он не обязан работать со всеми библиотеками ![]() |