|
3 / 3 / 0
Регистрация: 09.08.2010
Сообщений: 61
|
||||||
Деструктор10.08.2010, 22:08. Показов 5164. Ответов 23
Метки нет (Все метки)
Изучаю С++ по самоучителю щас прохожу конструкторы и деструкторы вознила такая проблема
Vnutri konstruktora. Do vizova funkcii display(). 10 Razrushenie Obiekta. Posle vipolnenia funkcii display(). Razrushenie Obiekta. У меня же выдает только : Vnutri konstruktora. Do vizova funkcii display(). 10 Razrushenie Obiekta. Posle vipolnenia funkcii display(). т.е. Разрушение объекта второй раз не происходит... скажите пожалуйста почему? к томуже использую точно тот компилятор, который указан в книге. P.S. извините если тему не в том отделе создал наверно надо было в разделе для начинающих... просто компилирую в visual C++
0
|
||||||
| 10.08.2010, 22:08 | |
|
Ответы с готовыми решениями:
23
Добавить деструктор к готовой программе Про деструктор и утечку памяти Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B |
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 11.08.2010, 15:44 | |
|
Нет. Стандарт (3.6.2) как раз жестко определяет, что в пределах одной единицы трансляции порядок конструирования и разрушения глобальных объектов четко определен. Равно как и порядок их разрушения - он строго обратен порядку конструирования. А вот если глобальные объекты расположены в разных единицах трансляции - таки да, порядок их конструирования будет как Б.Г. на душу положит.
Что же касается глобального объекта cout, то он конструируется один раз при первом включении <iostream> - и этот хитрый финт тоже описан у Элджера. Ну и разрушается в соответствующий момент. Тот факт, что за конструирование и разрушение глобальных объектов отвечает стартовый/финализирующий код приложения - сути процесса не меняет.
2
|
|
|
|
||||||||||||||||
| 11.08.2010, 16:22 | ||||||||||||||||
|
Про порядок внутри одного модуля учтём.
Про cout и то, что он конструируется один раз я как-то не догнал. Этот объект в каждом модуле получается свой чтоли (т.е. дублируется)? Но вопрос мой всё равно был не про это. А про порядок между вызовом конструкторов в программе и библиотеке. Тогда попробоую на примере и без всяких cout'ов, чтобы он глаза не мозололил
В исходниках gcc видно, что спецально предпринимаются попытки вызова именно в этом порядке (в исходниках файл crtstuff.c процедуры __do_global_ctors_aux и __do_global_dtors_aux) Правда пока я всю эту бодягу писал, начал подозревать, что разделение на "программный модуль" и "библиотеки" наврядли относится к стандарту и является свойством компилятора. Т.е. по вполне понятным причинам порешили, что надо сначала вызвать все библиотечные конструкторы, чтобы к моменту вызова конструкторов глобальных объектов из программного модуля вся библиотечная инициализация была звершена. В общем, по ходу я что-то тут нагнал, щас надо разобраться, в чём же именно нагнал
0
|
||||||||||||||||
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 11.08.2010, 16:41 | |
|
Я повторил твой эксперимент, и все получилось не так очевидно уже.... Если имена файлов mod.cc и lib.cc, то получается:
constr lib constr mod destr mod destr lib А вот если изменить имена на amod.cc и lib.cc, то получится уже вот что: constr mod constr lib destr lib destr mod Компилятор GCC 4.4.0. Я уже сталкивался с тем, что компилятор любит обрабатывать модули в алфавитном порядке их имен, поэтому сразу же провел именно такой эксперимент. И его результат вполне себе показателен - как-либо полагаться на порядок инициализации "библиотечных" и "программных" объектов нельзя, если этот порядок не гарантирован жестко - то ли он гарантирован в документации на библиотеку, то ли благодаря умелым рукам программиста. Что вполне соответствует букве Стандарта :-)
0
|
|
|
|
|
| 11.08.2010, 17:16 | |
|
Стоп. Запускать надо именно так, как я показывал. Один файл идёт как просто объектный файл в линковку, а другой в виде библиотеки (собственно почему я уже несколько постов напираю именно на понятие "библиотека").
Про гарантированность порядка - выходит действительно это свойство gcc. Но такую хрень мы наблюдали на Sun'овском компиляторе, на Intel'овском компиляторе для Itanium'а и непонятно каким компилятором для MIPS'а. Т.е. скорее всего и правда это свойство стандарт не гарантирует, а потому закладываться на него некорректно с точки зрения переносимости. Но gnu'тый софт может смело закладываться, поскольку большинство его расчитано именно на gcc
0
|
|
| 11.08.2010, 17:16 | |
|
Деструктор Деструктор! деструктор Деструктор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|