Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
Вот был вопрос о виртуальном деструкторе. Но если мы ставим ключевое слово виртуал перед деструктором базового класа, почему он должен быть дестуктором и класов наследников -- освобождать память и из под них. Если мы пишет виртуал перед функцией она как раз может или должна переопределяться в класе-наследнике?? Или здесь просто такая конвенция о виртуальном деструкторе? И вообще понятие деструктора в С++ одно из самых мне не очень понятных. Вот мы после обьявление класа пишем его конструктор (предназначен для выделение памяти и создание обьектов класа), а после него пишем его деструктор -- он что предполагает освобождение памяти и уничтожение обьекта -- при любом его создание? Но когда этот деструктор применяется -- когда обьект выходи из "игры"? Применяются ли здесь правила что выделение и уничтожение выделенной памяти должно иметь место в одном блоке (функции)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 01:59 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
stutВот был вопрос о виртуальном деструкторе. Но если мы ставим ключевое слово виртуал перед деструктором базового класа, почему он должен быть дестуктором и класов наследников -- освобождать память и из под них. Вообще-то дектруктор не освобождает память. Дектруктор выполняет деинициализацию объекта. Память удаляет оператор delete. stut Если мы пишет виртуал перед функцией она как раз может или должна переопределяться в класе-наследнике?? virtual без =0 само по себе никак не влияет на возможность или обязательность переопределения функции, помеченной этим ключевым словом, в наследниках класса. virtual с =0 обязывает наследников переопределить метод хотя бы в одном из наследников. stut Или здесь просто такая конвенция о виртуальном деструкторе? И вообще понятие деструктора в С++ одно из самых мне не очень понятных. Что ж там непонятного ? Концепция конструктора ясна ? Деструктор -- это конструктор наоборот. Конструктор конструирует (инициализирует) объект, деструктор -- деинициализирует объект. Ещё раз, ни та, ни другая операции не связаны никак с выделением и освобождением памяти. stutВот мы после обьявление класа пишем его конструктор (предназначен для выделение памяти и создание обьектов класа), а после него пишем его деструктор -- он что предполагает освобождение памяти и уничтожение обьекта -- при любом его создание? Не устану повторять: конструктор и дектруктор никак не связаны с работой с памятью. Объект может находится в любой памяти, например, автоматической, и независимо от этого его конструктор и деструктор будут вызваны. stut Но когда этот деструктор применяется -- когда обьект выходи из "игры"? Применяются ли здесь правила что выделение и уничтожение выделенной памяти должно иметь место в одном блоке (функции)? Конструктор и дектруктор никак не связаны с работой с памятью. Выделение и уничтожение динамической памяти не обязано быть в одном блоке программы, иначе в ней не было бы никакого смысла, она полностью повторяла бы поведение автоматической памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:38 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
stutНо когда этот деструктор применяется -- когда обьект выходи из "игры"? Деструктор срабатывает когда заканчивается область видимости объекта. Запусти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 13:02 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
Dima TstutНо когда этот деструктор применяется -- когда обьект выходи из "игры"? Деструктор срабатывает когда заканчивается область видимости объекта. Да ладно! Запусти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Не путай область видимости и время жизни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 14:29 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
stutВот был вопрос о виртуальном деструкторе. Но если мы ставим ключевое слово виртуал перед деструктором базового класа, почему он должен быть дестуктором и класов наследников -- освобождать память и из под них. Если мы пишет виртуал перед функцией она как раз может или должна переопределяться в класе-наследнике?? Или здесь просто такая конвенция о виртуальном деструкторе? И вообще понятие деструктора в С++ одно из самых мне не очень понятных. Вот мы после обьявление класа пишем его конструктор (предназначен для выделение памяти и создание обьектов класа), а после него пишем его деструктор -- он что предполагает освобождение памяти и уничтожение обьекта -- при любом его создание? Но когда этот деструктор применяется -- когда обьект выходи из "игры"? Применяются ли здесь правила что выделение и уничтожение выделенной памяти должно иметь место в одном блоке (функции)? Виртуальный деструктор нужен для правильной работы delele, когда тип объекта приведен к его базовому типу. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Обычно, конструктор выделяет память для членов класса, деструктор её освобождает. Но память может выделяться в других методах класса. Это т.н. ленивая инициализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 14:41 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
mcureenab Виртуальный деструктор нужен для правильной работы delele, когда тип объекта приведен к его базовому типу. Когда тип ссылки (в общем смысле) на объект приведён к типу ссылки на базовый тип. (ссылка в общем смысле, т.е. в С++ это -- указатель или ссылка С++). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 15:50 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
stutдеструктор -- он что предполагает освобождение памяти и уничтожение обьекта -- при любом его создание? Но когда этот деструктор применяется -- когда обьект выходи из "игры"? Применяются ли здесь правила что выделение и уничтожение выделенной памяти должно иметь место в одном блоке (функции)? Для automatic объектов, деструктор вызывается автоматически, когда завершается время жизни объекта. Обычно это происходит, так бы сказать, после return; но перед }. Код: plaintext 1. 2. 3. 4. 5. 6. Для static объектов вызов деструктора происходит автоматически перед завершением процесса. Для dynamic объектов вызов деструктора происходит автоматически из оператора delete перед удалением b из кучи. Кроме того, если у вас уже есть буфер для размещения объекта, конструктор можно вызывать явно но без выделения памяти. Тогда вызов деструктора будет вашей обязанностью. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 17:01 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
mcureenabНе путай область видимости и время жизни. Согласен. Навеяно другими языками, где эти понятия совпадают. В Си оно сложнее устроено. PS Пример мой ты криво поправил, ничего не поменялось, надо было static для t2 добавлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 20:00 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
Dima TНавеяно другими языками, где эти понятия совпадают. примеры - в студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 20:10 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TНавеяно другими языками, где эти понятия совпадают. примеры - в студию! Пожалуйста, Visual FoxPro Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 20:13 |
|
||
|
Несколько вопросов по C++ -- конструкторы и деструкторы
|
|||
|---|---|---|---|
|
#18+
Dima T, foxpro для уничтожения объектов использует подсчёт ссылок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 20:25 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39072000&tid=2018805]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 150ms |

| 0 / 0 |
