Здравствуйте, wvoquine, Вы писали:
W>А где на стандарт на русском можно сослаться?
Стандарт вроде не переводили — он как Коран читается только на языке оригинала8) Можно наверное найти в нете Страуструпа на русском. Русскоязычная вики как-то все-таки не очень, имхо.
В общем, я тут ради интереса посмотрел чего пишет Страуструп, в хорошем переводе. У него "конструктор по умолчанию" это действительно конструктор без аргументов. А то что генерит компилятор называется, "конструктор по умолчанию, сгенерированный компилятором" С конструктором копирования и остальными, очевидно, таже история
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Re[10]: Как работают конструктор и деструктор по умолчанию?
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, wvoquine, Вы писали:
W>>А где на стандарт на русском можно сослаться? CC>В программировании без английского тяжко придётся. CC>Так что видимо сначала придётся подтянуть английский.
Это я к тому, что тут "default constructor" из стандарта предлагают переводить как "конструктор без аргументов", а "конструктор по умолчанию" предлагают закрепить за конструктором, который неявно объявлен как defaulted функция
To be is to be the value of a variable
Re[10]: Как работают конструктор и деструктор по умолчанию?
Здравствуйте, Alexey_VL, Вы писали:
A_V> Русскоязычная вики как-то все-таки не очень, имхо.
Да, конечно. Кто ж спорит, я это там в полушутку написал. А чего ещё надо было ответить на то, что по-русски конструктор по умолчанию — не то же, что и по-английски?
В переводах того же Саттера встречается нечто подобное тому, что и в Страуструпе нашлось.
To be is to be the value of a variable
Re[4]: Как работают конструктор и деструктор по умолчанию?
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, v2kochetov, Вы писали:
I>>>Вот здесь описывается, почему тебе не надо знать этих тонкостей I>>>http://www.microsoft.com/learning/en/us/book.aspx?ID=6522&locale=en-us
V>>На какой странице? Рихтер вроде наоборот отличался любовью к тонкостям.
I>Ты хотел тонкостев по С++ в книге про С# и CLR .Net ?
Нет я хотел узнать где там написано что тонкостей С++ знать не надо.
Конечно понятно, что не всем надо, многим лучше знать про тонкости С# с .net. I>Вобщем, тут надо было смеяться
Re[10]: Как работают конструктор и деструктор по умолчанию?
Здравствуйте, Alexey_VL, Вы писали:
A_V>Стандарт вроде не переводили
перевод старого не встречал
новый стандарт уже переведен но пока не опубликован : http://zouev.blogspot.com/2011/01/blog-post.html
Re: Как работают конструктор и деструктор по умолчанию?
Здравствуйте, wrongman, Вы писали:
W>Так вот мне интересно как работают конструктор и деструктор по умолчанию. Максимум что мне удалось выяснить, так это то что конструктор память инициализирует, а деструктор вычищает. Но никаких подробностей я узнать не смог. Как это происходит? Какая последовательность действий выполняется. W>Почему к примеру компилятор сам не выделяет память под объект, а взваливает это на плечи конструктора?
Грубо говоря, из конструкции x = new CPPObject компилятор генерирует что-то вроде
x = malloc(sizeof(CPPObject))
x.ctor()
т.е. сначала компилятор генерирует код выделения памяти, затем код вызова конструктора. Конструктор ничего не выделяет — все уже выделено.
Любой конструктор, даже если в нем нет кода, делает некоторые обязательные вещи, например присваивает значение указателю на таблицу виртуальных функций и вызывает по очереди конструкторы всех полей данных, если они есть. То есть, даже объекту без конструктора надо кое-что делать при инициализации — именно поэтому и нужны конструкторы/деструкторы по умолчанию.
W>Ведь при "отмотке" стека происходит считывание адреса возврата, и управление просто передается во "внешнюю" часть программы. Как же тогда умудряется запуститься деструктор?
Когда создается объект, требующий вызова деструктора, компилятор добавляет один элемент в список. Этот-то список потом и разматывается, последовательно вызывая деструкторы и только потом уже выполняется ret.
Re[11]: Как работают конструктор и деструктор по умолчанию?
Поправочка: правила из какого-то черновика или каких-то черновиков нового стандарта, но не сам новый стандарт. Вероятно, автор перевода считает, что по содержанию FCD N3092 эквивалентен стандарту, но в действительности это далеко не так. Даже FDIS, который скоро должен появиться в открытом доступе, скорее всего, претерпит изменения перед окончательным принятием стандарта.
Re[12]: Как работают конструктор и деструктор по умолчанию?
Здравствуйте, Masterkent, Вы писали:
M>Поправочка: правила из какого-то черновика или каких-то черновиков нового стандарта, но не сам новый стандарт. Вероятно, автор перевода считает, что по содержанию FCD N3092 эквивалентен стандарту, но в действительности это далеко не так. Даже FDIS, который скоро должен появиться в открытом доступе, скорее всего, претерпит изменения перед окончательным принятием стандарта.
Насколько я понял перевод поддерживается в актуальном состоянии при изменении драфта.
т.е. он актуален насколько это возможно, да и автору нет смысла не доверять — он сам разработчик компилятора с++...
Re[2]: Как работают конструктор и деструктор по умолчанию?
Здравствуйте, v2kochetov, Вы писали:
V>Можно условно считать что в конструкторе выделяется память для всех членов объекта, в деструкторе эта память освобождается, компилятор просто достаточно умный чтобы сгенерировать код для этих целей в относительно простых случаях. Если хорошо знаешь ассемблер, можно набросать очень маленький пример и посмотреть что получается и как это работает, если плохо, то вот и ответ на твой вопрос — выбирай книжку по асму и читай листинг сгенерированный с++ компилятором.
Конструктор не выделяет память, а деструктор — не освобождает.
Они занимаются исключительно инициализацией и разрушением объекта.
Памятью под объект занимается либо компилятор (в случае автоматических/статических объектов), либо операторы new/delete в случае объектов в куче, либо вообще никто (в случае подобъектов).