Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Допустим я создаю переменную и потом присваиваю значение null Код: plaintext 1. 2. Насколько я понимаю, поскольку ссылок больше нет, то память должна с помощью GC высвобождаться? Я хочу что-бы это произошло немедленно, сразу после hw1 = null; И что-бы при этом отработал какой-либо метод класса HelloWolrd в котором я могу произвести дополнительные операции. Что мне нужно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 16:48 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Вообще говоря никак - так как GC-процес недетерминирован Ежели ваш объект держит какие-то ресурсы которые хочется освободить как можно скорее - то см IDisposable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 16:57 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
если не вдаваться в подробности: o.Dispose(); GC.Collect(); но вообще такие вопросы обычно от неправильного планирования возникают. у меня например все вопросы которые я задал тут - все от того что толком ни кто не знают что мы делаем. если бы был нормальный менеджер проекта и команда заточенная именно под разработку хорошо спроектированного продукта то вопросов бы не было. а у нас что не мэн - то звезда. причем небывалой величины :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 18:54 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Я рассматриваю такую задачу: есть класс, при создании нового обьекта счётчик увеличивается, при уничтожении обьектов - счётчик уменьшается. Допустим я пишу данный класс для стороннего использования и должен быть уверен, что как только все ссылки утеряны на переменную, обьект уничтожается и счётчик уменьшается. Исходим из того, что заставить сторонних разработчиков выполнять какой либо специальный метод у обьекта класса или использовать using () - невозможно. Единственно, за что можно зацепиться, когда реально происходит высвобождение срабатывает метод финализации, в котором счётчик уменьшается. Практика показала, что hw1 = null не приводит к срабатыванию ни ~MyClass ни к срабатывнию Dispose при реализации интерфейса IDispose; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 19:23 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Может это тебе поможет: Как писать деструкторы класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 14:34 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Прочитал, толково. Однако про null ничего там нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 15:48 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
ms-help://MS.NETFrameworkSDKv1.1/cpref/html/frlrfSystemIDisposableClassTopic.htm там очень ясно написано когда вызываются Finalize() и Dispose() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 16:12 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Все равно не хватает детерминированного деструктора. Нет единого виртуального метода для разрушения любого объекта, как например Free или Destroy в дельфи, и это очень огорчает. Внутри Finalize некоторые методы объектов уже нельзя использовать - я на этот скрипучий пень уже налетел. А еще крайне недостает виртуальных конструкторов. Вот. А еще в наследнике нельзя при переопределении виртуального метода нельзя изменить зону видимости protected -> public, и это странное ограничение старого дельфиста весьма озадачивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 18:09 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Dankov Все равно не хватает детерминированного деструктора. Угу - это главная проблема GC - и в .Net и в Java. А вот в том же Power Builder - объекты можно удалять и принудительно и автоматически! А еще крайне недостает виртуальных конструкторов. деструкторов наверно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 18:21 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
D C# нет такого понятия как в классическом С++! Здесь работает сборщик мусора! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 07:02 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
авторА еще крайне недостает виртуальных конструкторов. деструкторов наверно :) Нет, именно конструкторов. Компонентная модель в дельфи стала невероятно удачной только в силу того факта, что не нужно было в каждом наследнике заново пересоздавать конструктор Create с параметром aOwner. А в C# нет возможности автоматом унаследовать параметризованный конструктор. И уже в силу этого компонентная модель сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 10:00 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
авторD C# нет такого понятия как в классическом С++! Здесь работает сборщик мусора! Да пусть себе работает, кто ему мешает. Это с возможностью иметь детерминированные деструкторов - перпендикулярно! Ресурсы как правило ограничены. Это и хендлы, и количество коннектов, и банально память. И вполне может быть, что ресурс закончится быстрее, чем приложение дождется пока GC придет с лопатой. В этом случае сильно бы помогло наличие детерминированного деструктора. А GC пущай освобождает то, что программист сам не прибил. Не вижу препядствий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 10:07 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
авторА в C# нет возможности автоматом унаследовать параметризованный конструктор. Чего, правда что-ли? Сам пока не проверял. В Java это точно есть. Какая причина не делать это в C# - непонятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 10:19 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
В C# так же как и в C++ конструкторы а также оператор присваивания не наследуются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 11:47 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
авторВ C# так же как и в C++ конструкторы а также оператор присваивания не наследуются Вот C++ не надо вспоминать, а то сейчас стошнит. C# - синтетический язык, вобравший типа все лучшее из 15-ти языков после многолетних исследований с затратами под млрд президентов. Что не мешает удивляться некоторым очевидным недостаткам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 12:37 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
to Dankov: Я читал что от C,C++,Java,Pascal, Biasic. А какие еще языки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 13:10 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Dankov Вот C++ не надо вспоминать, а то сейчас стошнит При всем уважении - не на те вещи у вас аллергия. Эти ограничения в С++ и в C# появились не случайно - а как раз в результате "многолетних исследований с затратами под млрд президентов" P.S> softbuilder@inbox.ru а вы уверены что в Java не тоже самое - а то я с ней не знаком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 13:11 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
to funikovyuri: Возможно я не прав. Попробую уточнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 13:33 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Да, признаю ошибочность своего утверждения. Возможен только вызов конструктора супер-класса. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Так как конструктор не наследуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 13:48 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
А теперь главный вопрос - а в Delphi - конструкторы наследуются? точно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 14:07 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Народ, по-моему, вы гоните! В C# конструкторы наследуются: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 14:34 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Да не, Петрович, это вы неправильно понимаете что значит "наследуется" - а значит что в случае наследования конструкторов будет компилиться такой пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 14:41 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
авторА теперь главный вопрос - а в Delphi - конструкторы наследуются? точно? Совершенно точно. С первых дней существования дельфи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 17:29 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Ну тогда это даже чуть чуть странно - с одной стороны C++,Java,C# - с другой Delphi. Причем автор у Delphi и C# один и тот же :) Ok - будет время я покопаю в этом направлении - интересно чем Хейлсберг руководствовался при написании Object Pascal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 18:14 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
А за каким таким мне надо наследовать конструктор базового класса в C++? Он (его default разновидность) неявно вызывается при попытке создания инстанса производного класса, хотя вы можете делать это и явно. Поэтому логика такая - базовый класс инициализирует protected members, а производный класс наследует их, а не весь конструктор целиком, что есть глубоко правильно. Так что с точки зрения ANSI C++ код class base { public: base(int a){} }; class derived: public base { public: }; void main(void) { derived drv = new derived(10); } таки должен компилиться, если его переписать так (нормальный default constructor) class base { int secret; public: base(int a = 10){} }; base::base(int a) { secret = a; } class derived: public base { public: }; void main(void) { derived drv(); } а derived() компайлер сам напишет за Вас. Теперь всем адептам RAD средств (C#, Java, Delphi, etc..), особенно тем из них, кого тошнит от C++ - не путайте божий дар с яичницей. C/C++ - это то, на чём пишут ОС (UNIX, Windows), драйвера устройств, сервера баз данных, серьёзную матеатику и проч. Да, это pain in the ass, писать GUI даже на SDK без MFC поддержки. Ну так и пишите себе на здоровье, хоть на C#, хоть на VB.Net, хоть на Delphi, но не трогайте своими GUIшными руками святого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 21:42 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
авторА за каким таким мне надо наследовать конструктор базового класса в C++? Один минус в ненаследовании конструкторов (как мне кажется) , попробую рассуждать логически: если конструктор не наследуется, значит не наследуется программный код этого конструктора. В таком случае, все производные классы нуждаются в коде родителя, иначе нельзя будет скомпилить(выполнить) код потомка, т.е. код потомка несамодостаточен. Значит всегда нужно за собой "таскать" код родителя. Поэтому, если в Delphi конструктор наследуется, действительно ли можно обойтись без базового класса? Какие есть мысли по этому поводу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2004, 09:14 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
softbuilder@inbox.ru Это какой код предка надо переновить в потомка? Ничего переносить не надо - вот такой код будет работать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2004, 10:05 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду двоичный код, который при компиляции получается. В твоём примере, если всё будет находится в одной DLL - понятно что будет всё работать. Представь, что у тебя есть DLL c кодом родителя, ты компилишь DLL с кодом потомка, указав связь с DLL родителя. Всё нормально компилится. Теперь DLL родителя удаляем. Далее ты пишешь программу где создаёшь экземпляр потомка. Что получаем? Так как конструктор не наследуется и DLL родителя нет, что произойдет при вызовк base()? Подозреваю, что ошибка. Вот об этом и речь. А в случае Delphi, как я понимаю этого не произойдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2004, 10:21 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Да нет - это произойдет в любом случае - ни фига себе - убить код предка и ожидать нормальной работы!! Наследование - это же не copy&paste ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2004, 11:17 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
Вот-вот. Поэтому интересно, в Delphi также? Если в Delphi также, то какой прок от наследования конструкторов, непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2004, 12:08 |
|
||
|
Высвобождение ресурсов
|
|||
|---|---|---|---|
|
#18+
то какой прок от наследования конструкторов По-мойму, это типично RAD-овская "фича"... (чтобы "пальцами меньше по клаве стучать"), вспомните VFP, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. А при создании С#, соответственно, не "пошли на поводу" у человеческой лени, а решили сделать код более "структурированным" и "организованным" (ИМХО). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2004, 13:19 |
|
||
|
|

start [/forum/topic.php?all=1&fid=20&tid=1439494]: |
0ms |
get settings: |
12ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
170ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 277ms |
| total: | 590ms |

| 0 / 0 |
