Как работают конструктор и деструктор по умолчанию?
От: wrongman  
Дата: 26.03.11 11:59
Оценка: -1 :)
Добрый день уважаемые форумчане. Мой вопрос наверное покажется вам глупым. Но тем не менее, я нигде не смог найти на него ответа. Так вот мне интересно как работают конструктор и деструктор по умолчанию. Максимум что мне удалось выяснить, так это то что конструктор память инициализирует, а деструктор вычищает. Но никаких подробностей я узнать не смог. Как это происходит? Какая последовательность действий выполняется. Почему к примеру компилятор сам не выделяет память под объект, а взваливает это на плечи конструктора? Какие операции перегружаются для нового обьекта автоматически. Например мы можем сравнивать два новых обьекта не перегрузив опрацию сравнения? А присваивать один обект другому? И еще один вопрос. Когда при выполнении программы происходит освобождение стека от данных относящихся к этой области действия все обьекты тоже соотвественно стираются, но перед уничтожением обьекта происходит вызов деструктора. Но как? Ведь при "отмотке" стека происходит считывание адреса возврата, и управление просто передается во "внешнюю" часть программы. Как же тогда умудряется запуститься деструктор? Буду очень признателен, всем кто поможет мне разобраться в этом вопросе. Буду благодарен за любую помощь. Возможно кто то знает какую нибудь умную книжку(книги), где описаны подобные тонкие места программирования, или сайт или статью.
с++
Re: Как работают конструктор и деструктор по умолчанию?
От: Vain Россия google.ru
Дата: 26.03.11 14:47
Оценка: -1
Здравствуйте, wrongman, Вы писали:

W>Добрый день уважаемые форумчане.

И тебе добренький.

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

Потому что конструктор не выделяет память под объект.

W>Какие операции перегружаются для нового обьекта автоматически.

Конструктор без параметров/копирования, оператор присваивания и оператор взятия адреса.

W>Например мы можем сравнивать два новых обьекта не перегрузив опрацию сравнения?

Можно, добавив просто функцию сравнения.

W>А присваивать один обект другому?

Да.

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

Видимо компилятор проставляет вызов деструктора перед выходом из функции.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: Как работают конструктор и деструктор по умолчанию?
От: wrongman  
Дата: 26.03.11 15:16
Оценка:
Vain, спасибо вам большое за ответ!

А зачем вообще компилятор создает конструктор по умолчанию? Если память под обьект он выделяет сам. Какой вообще тогда от конструктора прок? Я имею в виду случай когда мы сами явно не создаем конструктор по умолчанию, зачем тогда компилятор делает это за нас?
Re[3]: Как работают конструктор и деструктор по умолчанию?
От: Vain Россия google.ru
Дата: 26.03.11 15:54
Оценка:
Здравствуйте, wrongman, Вы писали:

W>А зачем вообще компилятор создает конструктор по умолчанию?

Есть два конструктора по умолчанию. Какой из них?

W>Если память под обьект он выделяет сам.

В каком месте он это делает по-вашему?

W>Какой вообще тогда от конструктора прок? Я имею в виду случай когда мы сами явно не создаем конструктор по умолчанию, зачем тогда компилятор делает это за нас?

Вы не можете создать конструктор по умолчанию, потому что тогда он станет объявленым пользователем конструктором (не по умолчанию уж точно).
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Как работают конструктор и деструктор по умолчанию?
От: ZegSoft Россия  
Дата: 26.03.11 15:58
Оценка:
Здравствуйте, wrongman, Вы писали:

W>Vain, спасибо вам большое за ответ!


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


Компилятор сам не может выделять память!!! Выделение памяти осуществяется на этапе выполнения программы. Компилятор же отвечает лишь за этап компиляции. Исключение составляют пожалуй только статические переменные. Вот их как раз инициализирует компилятор. Все же остальные переменные инициализируются во время выполнения. И программа должна знать, как именно их иницилизировать. И компилятор вовсе не создает конструктор по умолчанию! Это ТЫ САМ его создаешь в своем коде. Точно так же ты можешь его и не создавать.
Например,


class CTest
{
public:
int a;
int b;

};



будет отлично работать и, как видишь, никаких конструкторов по умолчанию тут и близко нет.
Re[3]: Как работают конструктор и деструктор по умолчанию?
От: wvoquine  
Дата: 26.03.11 16:12
Оценка:
Здравствуйте, wrongman, Вы писали:

W>Vain, спасибо вам большое за ответ!


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


Наверное, в первую очередь для единообразия. Например, время жизни объекта отсчитывается от того момента, когда закончился его конструктор. Неявный конструктор вызывает конструкторы базовых подобъектов и подобъектов-членов, ведь они могут быть и явно определёнными. Он и определён как inline public, что, наверное, мало отличается от того, как если бы "компилятор делал всё сам".

Кроме того есть такое понятие, как тривиальный конструктор — т.е. конструктор ничего реально не делает, когда это возможно.
To be is to be the value of a variable
Re[4]: Как работают конструктор и деструктор по умолчанию?
От: wvoquine  
Дата: 26.03.11 16:28
Оценка: +1
Здравствуйте, Vain, Вы писали:

V>Есть два конструктора по умолчанию. Какой из них?


Не, это такая путаница. Бывает неявный конструктор по умолчанию и явно определённый пользователем: по умолчанию — вызывается без аргументов.
To be is to be the value of a variable
Re: Как работают конструктор и деструктор по умолчанию?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.03.11 16:46
Оценка: -3
Здравствуйте, wrongman, Вы писали:

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


Есть скажем иерархия A<-B<-C

>new

>C()
>B()
>A()
<A()
<B()
<C()
<new

Каждый конструктор первым делом устанавливает lpvtbl на свою таблицу, т.е. в итоге даже если захотим вызвать вирт метод, нихрена не выйдет, а если метод абстрактный, то будет pure virtual call.Компилет страхует от этого непотребства и виртуальные вызовы заменяет на обычные.

>delete

>~C()
>~B()
>~A()
<~A()
<~B()
<~C()
<delete

Каждый деструктор первым делом уставнавливает lpvtbl на свою таблицу, точно так же как и конструктор.

Разница между вызовами конструктором и деструкторов примерно следующая — конструктор сначала вызывает базовый а потом отрабатывает сам, а деструктор сначала отрабатывает сам а потом вызывает базовый.

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

Память выделяет new а освобождает delete

>Какие операции перегружаются для нового обьекта автоматически.


Операторы всякие

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


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

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


Вот здесь описывается, почему тебе не надо знать этих тонкостей
http://www.microsoft.com/learning/en/us/book.aspx?ID=6522&amp;locale=en-us
Re[5]: Как работают конструктор и деструктор по умолчанию?
От: Vain Россия google.ru
Дата: 26.03.11 17:08
Оценка: -1
Здравствуйте, wvoquine, Вы писали:

V>>Есть два конструктора по умолчанию. Какой из них?

W>Не, это такая путаница. Бывает неявный конструктор по умолчанию и явно определённый пользователем: по умолчанию — вызывается без аргументов.
По-русски, конструктор по умолчанию это тот который генерирует компилятор. А тот про которой вы говорите называется конструктором без параметров.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: Как работают конструктор и деструктор по умолчанию?
От: wvoquine  
Дата: 26.03.11 17:19
Оценка: :))
Здравствуйте, Vain, Вы писали:

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


V>>>Есть два конструктора по умолчанию. Какой из них?

W>>Не, это такая путаница. Бывает неявный конструктор по умолчанию и явно определённый пользователем: по умолчанию — вызывается без аргументов.
V>По-русски, конструктор по умолчанию это тот который генерирует компилятор. А тот про которой вы говорите называется конструктором без параметров.

А русская википедия поддерживает мою версию :
http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80_%D0%BF%D0%BE_%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E
To be is to be the value of a variable
Re[2]: Как работают конструктор и деструктор по умолчанию?
От: Alexey_VL  
Дата: 26.03.11 17:20
Оценка:
Здравствуйте, Vain, Вы писали:

W>>Какие операции перегружаются для нового обьекта автоматически.

V>Конструктор без параметров/копирования, оператор присваивания и оператор взятия адреса.

Деструктор забыли
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Re: Как работают конструктор и деструктор по умолчанию?
От: v2kochetov Россия  
Дата: 26.03.11 17:39
Оценка: -3
Здравствуйте, wrongman, Вы писали:

W>Добрый день уважаемые форумчане. Мой вопрос наверное покажется вам глупым. Но тем не менее, я нигде не смог найти на него ответа. Так вот мне интересно как работают конструктор и деструктор по умолчанию. Максимум что мне удалось выяснить, так это то что конструктор память инициализирует, а деструктор вычищает. Но никаких подробностей я узнать не смог. Как это происходит? Какая последовательность действий выполняется. Почему к примеру компилятор сам не выделяет память под объект, а взваливает это на плечи конструктора? Какие операции перегружаются для нового обьекта автоматически. Например мы можем сравнивать два новых обьекта не перегрузив опрацию сравнения? А присваивать один обект другому? И еще один вопрос. Когда при выполнении программы происходит освобождение стека от данных относящихся к этой области действия все обьекты тоже соотвественно стираются, но перед уничтожением обьекта происходит вызов деструктора. Но как? Ведь при "отмотке" стека происходит считывание адреса возврата, и управление просто передается во "внешнюю" часть программы. Как же тогда умудряется запуститься деструктор? Буду очень признателен, всем кто поможет мне разобраться в этом вопросе. Буду благодарен за любую помощь. Возможно кто то знает какую нибудь умную книжку(книги), где описаны подобные тонкие места программирования, или сайт или статью.


Можно условно считать что в конструкторе выделяется память для всех членов объекта, в деструкторе эта память освобождается, компилятор просто достаточно умный чтобы сгенерировать код для этих целей в относительно простых случаях. Если хорошо знаешь ассемблер, можно набросать очень маленький пример и посмотреть что получается и как это работает, если плохо, то вот и ответ на твой вопрос — выбирай книжку по асму и читай листинг сгенерированный с++ компилятором.
Re[2]: Как работают конструктор и деструктор по умолчанию?
От: v2kochetov Россия  
Дата: 26.03.11 17:41
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Вот здесь описывается, почему тебе не надо знать этих тонкостей

I>http://www.microsoft.com/learning/en/us/book.aspx?ID=6522&amp;locale=en-us

На какой странице? Рихтер вроде наоборот отличался любовью к тонкостям.
Re[7]: Как работают конструктор и деструктор по умолчанию?
От: Ops Россия  
Дата: 26.03.11 18:28
Оценка:
Здравствуйте, wvoquine, Вы писали:

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


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


V>>>>Есть два конструктора по умолчанию. Какой из них?

W>>>Не, это такая путаница. Бывает неявный конструктор по умолчанию и явно определённый пользователем: по умолчанию — вызывается без аргументов.
V>>По-русски, конструктор по умолчанию это тот который генерирует компилятор. А тот про которой вы говорите называется конструктором без параметров.

W>А русская википедия поддерживает мою версию :

W>http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80_%D0%BF%D0%BE_%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E

А я не поддерживаю википедию — мало ли, что Вы там написали? У меня вот Firefox слово "википедия" подчеркивает как ошибочное. А на слово "словарь", как и на "энциклопедию" не ругается.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[8]: Как работают конструктор и деструктор по умолчанию?
От: wvoquine  
Дата: 26.03.11 18:41
Оценка:
Здравствуйте, Ops, Вы писали:

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


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


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


V>>>>>Есть два конструктора по умолчанию. Какой из них?

W>>>>Не, это такая путаница. Бывает неявный конструктор по умолчанию и явно определённый пользователем: по умолчанию — вызывается без аргументов.
V>>>По-русски, конструктор по умолчанию это тот который генерирует компилятор. А тот про которой вы говорите называется конструктором без параметров.

W>>А русская википедия поддерживает мою версию :

W>>http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80_%D0%BF%D0%BE_%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E

Ops>А я не поддерживаю википедию — мало ли, что Вы там написали? У меня вот Firefox слово "википедия" подчеркивает как ошибочное. А на слово "словарь", как и на "энциклопедию" не ругается.


Ну, русскую вики, наверное, и не стоит так "поддерживать"
To be is to be the value of a variable
Re[3]: Как работают конструктор и деструктор по умолчанию?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.03.11 19:02
Оценка: +1
Здравствуйте, v2kochetov, Вы писали:

I>>Вот здесь описывается, почему тебе не надо знать этих тонкостей

I>>http://www.microsoft.com/learning/en/us/book.aspx?ID=6522&amp;locale=en-us

V>На какой странице? Рихтер вроде наоборот отличался любовью к тонкостям.


Ты хотел тонкостев по С++ в книге про С# и CLR .Net ?

Вобщем, тут надо было смеяться
Re[3]: Как работают конструктор и деструктор по умолчанию?
От: Vain Россия google.ru
Дата: 26.03.11 19:23
Оценка:
Здравствуйте, Alexey_VL, Вы писали:

W>>>Какие операции перегружаются для нового обьекта автоматически.

V>>Конструктор без параметров/копирования, оператор присваивания и оператор взятия адреса.
A_V>Деструктор забыли
чорт, виртуальный деструктор!
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: Как работают конструктор и деструктор по умолчанию?
От: CreatorCray  
Дата: 26.03.11 20:47
Оценка:
Здравствуйте, wvoquine, Вы писали:

W>А русская википедия поддерживает мою версию :

W>http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80_%D0%BF%D0%BE_%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E
Ты бы лучше на стандарт ссылался.
Глядишь, в поисках параграфа стандарта на который надо сослаться вопрос решился бы сам собой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Как работают конструктор и деструктор по умолчанию?
От: wvoquine  
Дата: 26.03.11 21:12
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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


W>>А русская википедия поддерживает мою версию :

W>>http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80_%D0%BF%D0%BE_%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E
CC>Ты бы лучше на стандарт ссылался.
CC>Глядишь, в поисках параграфа стандарта на который надо сослаться вопрос решился бы сам собой.

А где на стандарт на русском можно сослаться?
To be is to be the value of a variable
Re[9]: Как работают конструктор и деструктор по умолчанию?
От: CreatorCray  
Дата: 26.03.11 21:34
Оценка:
Здравствуйте, wvoquine, Вы писали:

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

В программировании без английского тяжко придётся.
Так что видимо сначала придётся подтянуть английский.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
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&amp;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...
Пока на собственное сообщение не было ответов, его можно удалить.