![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
да не говори ![]() UnrealMan(как впрочем и Fazil6), не раз оказывал мне услугу, подлавливая на глупостях, которые я писал в разделе по срр, жаль что он сюда редко заходит ![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
и кстати уж лучше получить минус от Унреала (хоть что-то полезное узнаешь), чем все эти плюсы от нубиков, которые еще сами не веря своему счастью - продержались еще семестр, с полными штанами радости остервенело давят кнопку [+]((((:
|
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
все, что выше не читал
![]() в конструкторе объект еще не создан - и док-во этому факту то, что при эксцепшене в конструкторе автоматически вызывается соответствующий delete без вызова деструктора |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Rififi
Да какая разница, плюс, минус ![]() ![]() а так..что минус, что плюс..что синус с косинусом ![]() Добавлено через 3 минуты и 28 секунд
какой еще delete??? Это сообщение отредактировал(а) azesmcar - 9.4.2009, 23:37 |
|||
|
||||
UnrealMan |
|
||||||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
То, что ты имел в виду, было известно лишь тебе и некоторым телепатам. Написал-то ты совсем другое.
Объект становится созданным в момент начала его lifetime. В случае наличия нетривиального конструктора объект начинает существовать только после полного отрабатывания его конструктора:
Если конструктор объекта выбросит исключение, то его деструктор вызываться не будет - как раз потому, что объекта создано не было. Это и есть общепринятое понимание созданности объекта.
Мне понятна его точка зрения, а также понятно то, что человек не знает о принятых в C++ соглашениях и поэтому он совершенно не в теме.
Это просто у кого-то в глазах двоится ![]() Выбрось в топку свою книжку. Явно определённый деструктор всего один, а тело деструктора - это одна из его составных частей, которая выполняется первой:
Кстати, да, инициализированность нестатических членов-данных в момент выполнения тела конструктора в общем случае не гарантируется. |
||||||||||||||
|
|||||||||||||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
Ну, вот ты и привёл причину, по которой выделенное жирным
в общем случае неверно. |
||||
|
|||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
я бы не посчитал это придиркой, если б это поведение отличалось бы от случая POD-объекта вне класса ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
UnrealMan, как хорошо, что вы решили написать - так гораздо лучше, чем анонимные минусы
![]() Интересно и как с этим не стыкуется моя фраза:
Этим я и имел в виду, что при простейших объектах конструктор может вообще отсутствовать либо в его теле уже можно считать, что он создан. В чем тогда я не прав? К тому же, если в теле конструктора вылетит исключение, автоматический деструктор вызван будет все равно. А свой деструктор само собой не вызовется. Вы все время оперируете только стандартом - теперь общепринятым мнением, как-то нелогично получается. Мнения все разные, просто нужно понимать что делаешь. Все подвести под стандарт нельзя. |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Это велкикая книжка и я верю ей на 100% ![]() ![]() вот англ.версия: An important difference between the destructor and the copy constructor or assignment operator is that even if we write our own destructor, the synthesized destructor is still run. For example, we might write the following empty destructor for class Sales_item:
When objects of type Sales_item are destroyed, this destructor, which does nothing, would be run. After it completes, the synthesized destructor would also be run to destroy the members of the class. The synthesized destructor destroys the string member by calling the string destructor, which frees the memory used to hold the isbn. The units_sold and revenue members are of built-in type, so the synthesized destructor does nothing to destroy them. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Если говорить на примере, то если выполнить код:
Итак: исключение в конструкторе. Но деструктор для поля Bclass b; вызывается автоматически. Т.е. все члены класса, которые создаются автоматически - удаляются автоматически даже если в конструкторе возникло исключение. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
потрясающе!!! только это никакого отношения к рассматриваемому когда-то давно в начале вопросу не имеет. Весь фокус именно в том, что деструктор самого класса не вызывается потому как создание объекта закончено небыло. Причем тут объекты членов класса? Они были коректно созданы и конструкторы их были вызваны. Поэтому и деструкторы их работают Вобщем пора закругляться с этой темой. Никто тут никому ничего не докажет... |
|||
|
||||
UnrealMan |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
В том, что ты апеллируешь к собственновыдуманному пониманию созданности объекта, игнорируя общепринятое.
Слушай, а давай я сейчас напишу на листке бумаги
назову это стандартом C++ и буду всем тут втирать, что вот, согласно стандарту C++, любая программа должна... (и далее по тексту). Мнения по поводу того, что называть стандартом C++, могут быть разные. Ну и в какой цирк тогда превратится форум? Отрицать общепринятые соглашения глупо. Исходя из элементарного здравого смысла, слова автора по умолчанию трактуют общепринятым образом - если автор явным образом не оговорил иное толкование своих слов. Иначе любую фразу можно истолковывать неоднозначно и смысл в общении как таковом отпадает. Аминь. Только не думай, что другие тоже должны верить твоей Священной Книге. Самый достоверный источник правил C++ - это стандарт вместе с приведёнными на http://www.open-std.org/jtc1/sc22/wg21/ исправлениями технических опечаток. |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я не спорю. но мне его ещё рано читать. Перед тем, как научиться бегать неплохо бы освоить ходьбу ![]() |
|||
|
||||
Anikmar |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Перевожу на русский язык эту фразу и не понимаю: В том, что ты [апеллируешь][обжалуешь] к собственновыдуманному пониманию созданности объекта, игнорируя общепринятое Это не издевательство - я не понял в каком контексте используется слово "апеллируешь" Как я понял, моя вина в том, что я имею собственное мнение игнорируя общепринятое? Во-первых - я его не игнорирую, а ясно выразил свое мнение.
зы.
Мы с вами водки вместе не пили, вы не моя жена и не мой начальник, так что что мне делать, когда, бегом или шагом я решаю сам. Если вежливо разговаривать вам мешает стандарт - то я принимаю это к сведению, а если отсутствие воспитания - то сочувствую. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |