![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| IKM2007 |
|
||||||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: нет Всего: 40 |
Доброго дня. Допустим есть следующие классы
SimpleClass.h
ClassOwner.h
ClassOwner.cpp
тогда при выполнении следующего кода main.cpp
получим вывод: constructor Как я понимаю дело происходит так? Компилятор смотрит на обьявление класса ClassOwner, видит что там нету деструктора и генерирует свой деструктор по умолчанию. В генерированном деструкторе он "должен" вызвать деструкторы всех членов класса, то есть в нашем случае деструктор auto_ptr<SimpleClass>. НО он пока что не знает что из себя представляет SimpleClass, следовательно не может даже вызвать деструктор auto_ptr, следовательно не будет вызван также деструктор SimpleClass-а? Или он все таки в силах конструировать деструктор auto_ptr, но во время delete-а в деструкторе auto_ptr не может найти destructor для неполного типа? Какой из этих вариантов правильный? Или же все совсем иначе? -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
IKM2007,
при использовании авто_птр в овнере нужно определить (пустой) деструктор, там где есть уже полное описание импла.. и еще о копи-конструкторе следует позаботиться.. Добавлено через 3 минуты и 2 секунды да, это проблема не самого ауто_птр, а делете для неполного типа.. |
|||
|
||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: нет Всего: 40 |
Чтобы компилятор не создал свой деструктор ДО просмотра реализации этого класса, следовательно до полного определения impl-а? И все таки Добавлено через 6 минут и 3 секунды А если не определить копи-конструктор, он в сгенерированном даст ошибку или не сделает ничего? -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну так у ауто_птр есть же копи-конструктор..... Добавлено через 1 минуту и 20 секунд
ага, с целью чтоб делете деструктора ауто_птр знала о импле.. |
||||
|
|||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: нет Всего: 40 |
Да
Тогда все должно быть нормально, так как он просто передаст указатель на обьект новому auto_ptr. Добавлено через 48 секунд Тогда зачем нам переопределить копи-конструктор? -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
потому что семантика копирования ауто_птр отличается от той, которая требуется в большинстве случаев и является ожидаемой..
а что будет со старым ? как его использовать ? Это сообщение отредактировал(а) mes - 9.7.2012, 11:35 |
|||
|
||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: нет Всего: 40 |
Ладно понял. Спасибо! -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |