Re[9]: Как работают конструктор и деструктор по умолчанию?
От: Alexey_VL  
Дата: 26.03.11 21:36
Оценка:
Здравствуйте, wvoquine, Вы писали:

W>А где на стандарт на русском можно сослаться?


Стандарт вроде не переводили — он как Коран читается только на языке оригинала8) Можно наверное найти в нете Страуструпа на русском. Русскоязычная вики как-то все-таки не очень, имхо.

В общем, я тут ради интереса посмотрел чего пишет Страуструп, в хорошем переводе. У него "конструктор по умолчанию" это действительно конструктор без аргументов. А то что генерит компилятор называется, "конструктор по умолчанию, сгенерированный компилятором" С конструктором копирования и остальными, очевидно, таже история
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Re[10]: Как работают конструктор и деструктор по умолчанию?
От: wvoquine  
Дата: 26.03.11 22:03
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, wvoquine, Вы писали:


W>>А где на стандарт на русском можно сослаться?

CC>В программировании без английского тяжко придётся.
CC>Так что видимо сначала придётся подтянуть английский.

Это я к тому, что тут "default constructor" из стандарта предлагают переводить как "конструктор без аргументов", а "конструктор по умолчанию" предлагают закрепить за конструктором, который неявно объявлен как defaulted функция
To be is to be the value of a variable
Re[10]: Как работают конструктор и деструктор по умолчанию?
От: wvoquine  
Дата: 26.03.11 22:16
Оценка:
Здравствуйте, Alexey_VL, Вы писали:

A_V> Русскоязычная вики как-то все-таки не очень, имхо.


Да, конечно. Кто ж спорит, я это там в полушутку написал. А чего ещё надо было ответить на то, что по-русски конструктор по умолчанию — не то же, что и по-английски?

В переводах того же Саттера встречается нечто подобное тому, что и в Страуструпе нашлось.
To be is to be the value of a variable
Re[4]: Как работают конструктор и деструктор по умолчанию?
От: v2kochetov Россия  
Дата: 28.03.11 15:19
Оценка:
Здравствуйте, 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]: Как работают конструктор и деструктор по умолчанию?
От: WiseAlex Беларусь  
Дата: 29.03.11 06:59
Оценка: 4 (1) +1
Здравствуйте, Alexey_VL, Вы писали:

A_V>Стандарт вроде не переводили

перевод старого не встречал
новый стандарт уже переведен но пока не опубликован : http://zouev.blogspot.com/2011/01/blog-post.html
Re: Как работают конструктор и деструктор по умолчанию?
От: Кодёнок  
Дата: 29.03.11 09:12
Оценка:
Здравствуйте, wrongman, Вы писали:

W>Так вот мне интересно как работают конструктор и деструктор по умолчанию. Максимум что мне удалось выяснить, так это то что конструктор память инициализирует, а деструктор вычищает. Но никаких подробностей я узнать не смог. Как это происходит? Какая последовательность действий выполняется.

W>Почему к примеру компилятор сам не выделяет память под объект, а взваливает это на плечи конструктора?

Грубо говоря, из конструкции x = new CPPObject компилятор генерирует что-то вроде

x = malloc(sizeof(CPPObject))
x.ctor()

т.е. сначала компилятор генерирует код выделения памяти, затем код вызова конструктора. Конструктор ничего не выделяет — все уже выделено.

Любой конструктор, даже если в нем нет кода, делает некоторые обязательные вещи, например присваивает значение указателю на таблицу виртуальных функций и вызывает по очереди конструкторы всех полей данных, если они есть. То есть, даже объекту без конструктора надо кое-что делать при инициализации — именно поэтому и нужны конструкторы/деструкторы по умолчанию.

W>Ведь при "отмотке" стека происходит считывание адреса возврата, и управление просто передается во "внешнюю" часть программы. Как же тогда умудряется запуститься деструктор?


Когда создается объект, требующий вызова деструктора, компилятор добавляет один элемент в список. Этот-то список потом и разматывается, последовательно вызывая деструкторы и только потом уже выполняется ret.
Re[11]: Как работают конструктор и деструктор по умолчанию?
От: Masterkent  
Дата: 30.03.11 03:33
Оценка:
WiseAlex:

A_V>>Стандарт вроде не переводили

WA>перевод старого не встречал
WA>новый стандарт уже переведен но пока не опубликован : http://zouev.blogspot.com/2011/01/blog-post.html

Поправочка: правила из какого-то черновика или каких-то черновиков нового стандарта, но не сам новый стандарт. Вероятно, автор перевода считает, что по содержанию FCD N3092 эквивалентен стандарту, но в действительности это далеко не так. Даже FDIS, который скоро должен появиться в открытом доступе, скорее всего, претерпит изменения перед окончательным принятием стандарта.
Re[12]: Как работают конструктор и деструктор по умолчанию?
От: WiseAlex Беларусь  
Дата: 31.03.11 09:42
Оценка:
Здравствуйте, Masterkent, Вы писали:

M>Поправочка: правила из какого-то черновика или каких-то черновиков нового стандарта, но не сам новый стандарт. Вероятно, автор перевода считает, что по содержанию FCD N3092 эквивалентен стандарту, но в действительности это далеко не так. Даже FDIS, который скоро должен появиться в открытом доступе, скорее всего, претерпит изменения перед окончательным принятием стандарта.


Насколько я понял перевод поддерживается в актуальном состоянии при изменении драфта.
т.е. он актуален насколько это возможно, да и автору нет смысла не доверять — он сам разработчик компилятора с++...
Re[2]: Как работают конструктор и деструктор по умолчанию?
От: jazzer Россия Skype: enerjazzer
Дата: 31.03.11 10:26
Оценка:
Здравствуйте, v2kochetov, Вы писали:

V>Можно условно считать что в конструкторе выделяется память для всех членов объекта, в деструкторе эта память освобождается, компилятор просто достаточно умный чтобы сгенерировать код для этих целей в относительно простых случаях. Если хорошо знаешь ассемблер, можно набросать очень маленький пример и посмотреть что получается и как это работает, если плохо, то вот и ответ на твой вопрос — выбирай книжку по асму и читай листинг сгенерированный с++ компилятором.


Конструктор не выделяет память, а деструктор — не освобождает.
Они занимаются исключительно инициализацией и разрушением объекта.
Памятью под объект занимается либо компилятор (в случае автоматических/статических объектов), либо операторы new/delete в случае объектов в куче, либо вообще никто (в случае подобъектов).
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[13]: Как работают конструктор и деструктор по умолчанию?
От: Masterkent  
Дата: 31.03.11 15:24
Оценка:
WiseAlex:

WA>Насколько я понял перевод поддерживается в актуальном состоянии при изменении драфта.


Учёт всех изменений черновика — это довольно трудоёмкая задача.

WA>т.е. он актуален насколько это возможно


Очень в этом сомневаюсь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.