| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > auto_ptr & PIMPL idiom |
| Автор: IKM2007 8.7.2012, 11:24 | ||||||||
| Доброго дня. Допустим есть следующие классы SimpleClass.h
ClassOwner.h
ClassOwner.cpp
тогда при выполнении следующего кода main.cpp
получим вывод: constructor Как я понимаю дело происходит так? Компилятор смотрит на обьявление класса ClassOwner, видит что там нету деструктора и генерирует свой деструктор по умолчанию. В генерированном деструкторе он "должен" вызвать деструкторы всех членов класса, то есть в нашем случае деструктор auto_ptr<SimpleClass>. НО он пока что не знает что из себя представляет SimpleClass, следовательно не может даже вызвать деструктор auto_ptr, следовательно не будет вызван также деструктор SimpleClass-а? Или он все таки в силах конструировать деструктор auto_ptr, но во время delete-а в деструкторе auto_ptr не может найти destructor для неполного типа? Какой из этих вариантов правильный? Или же все совсем иначе? |
| Автор: IKM2007 8.7.2012, 11:38 | ||||
Чтобы компилятор не создал свой деструктор ДО просмотра реализации этого класса, следовательно до полного определения impl-а? И все таки
Добавлено через 6 минут и 3 секунды А если не определить копи-конструктор, он в сгенерированном даст ошибку или не сделает ничего? |
| Автор: mes 8.7.2012, 11:50 | ||||
ну так у ауто_птр есть же копи-конструктор..... Добавлено через 1 минуту и 20 секунд
ага, с целью чтоб делете деструктора ауто_птр знала о импле.. |
| Автор: IKM2007 8.7.2012, 12:08 | ||
Да
Тогда все должно быть нормально, так как он просто передаст указатель на обьект новому auto_ptr. Добавлено через 48 секунд Тогда зачем нам переопределить копи-конструктор? |
| Автор: mes 8.7.2012, 12:18 | ||
потому что семантика копирования ауто_птр отличается от той, которая требуется в большинстве случаев и является ожидаемой..
а что будет со старым ? как его использовать ? |
| Автор: IKM2007 8.7.2012, 12:37 | ||
Ладно понял. Спасибо! |