![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Djuffin |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
На толкнулся на элементарный пример не совсем правильного (на мой взгляд) порядка вызова деструкторов. Ключевое слово explicit не поставлено нарочно. Предположим, что по логике его там быть не должно.
По моему то, что деструктор (а перед этим конструктор) вызывается 2 раза подряд не нормально. Где я туплю??? Пробовал на bcc 5.6.4, cl 13.10, gcc 2.95 Вот программа.
Вот ее вывод.
|
||||
|
|||||
| Earnest |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Все правильно: все вызовы деструктора, кроме последнего, разрушают временные объекты.
Строка a=1 вызывает конструктор A(int), чтобы создать временный объект, который затем копируется в a (оператором присваивания!). Затем временный объект разрушается. Потом все то же самое для строки a=2. И, наконец, при выходе из функции, разрушается сам объект a. Видимо, ты путаешь две вещи:
А вот здесь:
копирование происходит с помощью оператора "=", с предварительным созданием, а затем удалением временного объекта. Если ты сделаешь конструктор A(int) explicit, то такой код не скомпилируется - разве что определить оператор =(int). -------------------- ... |
||||||
|
|||||||
| Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
Понял. Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |