Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 401 402 [403] 404 405 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#6031
,
|
|
|
|
D_KEY, я то читал, и ещё раньше.
Только эти слова в ступор вводят - нах... finally? Ну, и да Цитата D_KEY @ не ясно, зачем это делать встроенным средством, а не через RAII + лямбды + "макросы". |
|
Сообщ.
#6032
,
|
|
|
|
Цитата MyNameIsIgor @ Только эти слова в ступор вводят - нах... finally? Возможно, что для понижения порога вхождения. Вот Delphi'ец захочет на D посмотреть, не найдет там своих finally и уйдет, хлопнув дверью А тут начнет писать с finally, а постепенно проникнется идеями RAII и scope. |
|
Сообщ.
#6033
,
|
|
|
|
У меня вопрос к программистам, в основном, на языках с GC и на Delphi(который хоть и без GC, но часто ведет себя так, как будь-то у него этот самый GC есть). Как вы обычно работаете с ресурсами, у которых может быть несколько владельцев? Скажем, есть у вас сетевое соединение, которое используется несколькими объектами и которое должно быть закрыто тогда, когда ни одному из объектов оно больше не нужно. Тут даже with/using/try-with-resources будет недостаточно.
|
|
Сообщ.
#6034
,
|
|
|
|
Логично предположить, что счётчиком.
|
|
Сообщ.
#6035
,
|
|
|
|
Цитата D_KEY @ У меня вопрос к программистам, в основном, на языках с GC и на Delphi(который хоть и без GC, но часто ведет себя так, как будь-то у него этот самый GC есть). Как вы обычно работаете с ресурсами, у которых может быть несколько владельцев? Скажем, есть у вас сетевое соединение, которое используется несколькими объектами и которое должно быть закрыто тогда, когда ни одному из объектов оно больше не нужно. Почему они владельцы, а не клиенты? |
|
Сообщ.
#6036
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ У меня вопрос к программистам, в основном, на языках с GC и на Delphi(который хоть и без GC, но часто ведет себя так, как будь-то у него этот самый GC есть). Как вы обычно работаете с ресурсами, у которых может быть несколько владельцев? Скажем, есть у вас сетевое соединение, которое используется несколькими объектами и которое должно быть закрыто тогда, когда ни одному из объектов оно больше не нужно. Почему они владельцы, а не клиенты? Называй как хочешь Главное, что соединение должно быть живо, пока к нему обращается хоть один "клиент" и оно должно умереть, как только оно больше никем не востребовано. |
|
Сообщ.
#6037
,
|
|
|
|
Для этого делается целое специальное устройство-библиотека пуля, прикрытое обычно фабрикой.
|
|
Сообщ.
#6038
,
|
|
|
|
Цитата Машина @ Для этого делается целое специальное устройство-библиотека пуля, прикрытое обычно фабрикой. Можно пример? Если имеется в виду пул соединений, то это, во-первых, другая задача, а во-вторых, кто и когда "возвращает" соединение в пул? |
|
Сообщ.
#6039
,
|
|
|
|
Если другая задача, то я не понимаю, о чем вообще речь...
|
|
Сообщ.
#6040
,
|
|
|
|
Цитата Машина @ Если другая задача, то я не понимаю, о чем вообще речь... Ну мог бы тогда ответить на "во-вторых" А речь о том, что делать, если речь идет об освобождении ресурса, доступ к которому осуществляется из нескольких объектов. Некоторое сетевое соединение - лишь пример. Вот как это будет на С++ без GC: ![]() ![]() class Network_connection { /*...*/ ~Network_connection() { // закрывает соединение при уничтожении объекта } }; class Some_class1 { /*...*/ private: shared_ptr<Network_connection> connection; }; class Some_class2 { /*...*/ private: shared_ptr<Network_connection> connection; }; // ... // Множество объектов классов Some_class1 и Some_class2, // а также другие классы и обычные функции, // могут использовать один объект Network_connection, // как только таких пользователей не останется, объект будет удален // и соединение будет закрыто Т.е. подсчет ссылок, конечно, хуже GC, но он позволяет грамотно управлять ресурсами(не только памятью). Мне интересно, есть ли какой-то прием, который обычно используют в языках с GC? with/using/try-with-resources/etc. позволяют автоматически управлять ресурсами в пределах одного метода/функции, но что делать в более общем случае? |
|
Сообщ.
#6041
,
|
|
|
|
Цитата D_KEY @ Дык тоже чего нить с подсчётом соединений. Правда какой нить join и detach руками придётся дёргать, в detach при обнулении счётчика рвать соединение. Хотя хз, может есть чего и получше. А речь о том, что делать, если речь идет об освобождении ресурса, доступ к которому осуществляется из нескольких объектов. |
|
Сообщ.
#6042
,
|
|
|
|
Цитата D_KEY @ Вот как это будет на С++ без GC: Я совсем не понял приведенного примера... Покажи как ты будешь использовать Some_class1 и Some_class2(я догадываюсь как, но там возникают тоже некоторые вопросы)? Добавлено Кстати с Новым Годом всех !!! |
|
Сообщ.
#6043
,
|
|
|
|
Цитата Повстанець @ Цитата D_KEY @ Дык тоже чего нить с подсчётом соединений. Правда какой нить join и detach руками придётся дёргать, в detach при обнулении счётчика рвать соединение. Хотя хз, может есть чего и получше.А речь о том, что делать, если речь идет об освобождении ресурса, доступ к которому осуществляется из нескольких объектов. Вот и спрашивается, есть ли. А если нет, то есть ли стандартные/пользовательские средства, вроде C++'ных shared_ptr? И насколько их просто сделать? И насколько просто будет использовать? В Delphi, как я понимаю, заюзают интерфейсы, т.к. у них подсчет ссылок встроенный. Добавлено Цитата KILLER @ Цитата D_KEY @ Вот как это будет на С++ без GC: Я совсем не понял приведенного примера... Покажи как ты будешь использовать Some_class1 и Some_class2(я догадываюсь как, но там возникают тоже некоторые вопросы)? Да как угодно. Может им в конструкторе connection передается или через метод специальный - это не имеет значения. А использовать так, например: ![]() ![]() Some_class1 obj(my_connection); // ... shared_ptr<Some_class2> obj2 = make_shared<Some_class2>(my_connection); // ... Some_class2 obj3(obj.get_connection()); // Или просто: shared_ptr<Network_connection> connection = my_connection; В общем, это уже не важно... |
|
Сообщ.
#6044
,
|
|
|
|
Цитата D_KEY @ А использовать так, например: ааа, я просто подумал что у тебя на каждое соединение свой Some_classN, что и ввело меня в ступор... Добавлено Цитата D_KEY @ Вот и спрашивается, есть ли. А если нет, то есть ли стандартные/пользовательские средства, вроде C++'ных shared_ptr? Да есть конечно, Deswer на предыдущих страницах продемонстрировал вроде как для делфи, или не? |
|
Сообщ.
#6045
,
|
|
|
|
Цитата KILLER @ Цитата D_KEY @ А использовать так, например: ааа, я просто подумал что у тебя на каждое соединение свой Some_classN, что и ввело меня в ступор... Добавлено Цитата D_KEY @ Вот и спрашивается, есть ли. А если нет, то есть ли стандартные/пользовательские средства, вроде C++'ных shared_ptr? Да есть конечно, Deswer на предыдущих страницах продемонстрировал вроде как для делфи, или не? ![]() Он демонстрировал как-то на интерфейсах, о чем я упомянул. Интересно, что там в Java/C#. |