Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PIMPL+auto_ptr на VS2010, проблема реализации 
V
    Опции темы
xvr
Дата 25.1.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Сборка: g++ 1.cpp 2.cpp

Это сообщение отредактировал(а) xvr - 25.1.2011, 12:50
PM MAIL   Вверх
azesmcar
Дата 25.1.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



xvr

Это не баг, деструктор в файле 1.cpp явно недоступен, его там просто нет, как и описания всего класса. Ошибка gcc в том, что он не предупредил об этом (странно кстати). Тут кстати SomeClass и не нужен вовсе, он и без этого не будет вызываться. Все дело в том, что у тебя нет деструктора в классе X, а значит он будет сгенерирован компилятором, сгенерирован он будет естестественно в файле 1.cpp, где он никак не может видеть деструктора класса Y и соответственно вызвать его никак не может.

Добавлено через 4 минуты и 14 секунд
http://www.gotw.ca/publications/mill12.htm
Цитата

Aside: Note that if you use an auto_ptr member, then: a) you must either provide the definition of WidgetImpl with the definition of Widget, or if you want to keep hiding WidgetImpl you must write your own destructor for Widget even if it's a trivial destructor;[2] and b) you should also provide your own copy construction and assignment for Widget because normally you don't want transfer-of-ownership semantics for class members. If you have a different kind of smart pointer available, consider using that instead of auto_ptr, but the principles being described here remain important.


Это сообщение отредактировал(а) azesmcar - 25.1.2011, 13:01
PM   Вверх
xvr
Дата 25.1.2011, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(azesmcar @  25.1.2011,  12:58 Найти цитируемый пост)
Ошибка gcc в том, что он не предупредил об этом (странно кстати).
Именно! В этом и ошибка, VS кстати предупреждает.

Цитата(azesmcar @  25.1.2011,  12:58 Найти цитируемый пост)
Тут кстати SomeClass и не нужен вовсе, он и без этого не будет вызываться.
Угу, это остаток от эксперимента с эксепшенами.

PS. Я добавил кое что к примеру, gcc по прежнему вполне счастлив, но результат зависит от порядка линковки файлов:
Код

[rakhvato@msteplxl41 qq1]$ g++ 2.cpp 1.cpp                                              
[rakhvato@msteplxl41 qq1]$ ./a.out 
~X()
~Y()
[rakhvato@msteplxl41 qq1]$  g++ 1.cpp 2.cpp                                              
[rakhvato@msteplxl41 qq1]$ ./a.out 
~X()

Вот такие пироги  smile 


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  bug.zip 0,84 Kb
PM MAIL   Вверх
azesmcar
Дата 25.1.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(xvr @  25.1.2011,  13:16 Найти цитируемый пост)
Именно! В этом и ошибка, VS кстати предупреждает.

Да, в этом он ошибается smile 
Но по части кода ведет он себя как и ожидалось. А вот у меня ситуация немного другая, gcc работает, а VS - нет. smile

Добавлено через 53 секунды
Цитата(xvr @  25.1.2011,  13:16 Найти цитируемый пост)
Вот такие пироги   

вот это уже интереснее smile  smile 
PM   Вверх
xvr
Дата 25.1.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(azesmcar @  25.1.2011,  13:18 Найти цитируемый пост)
А вот у меня ситуация немного другая, gcc работает, а VS - нет.

Ну в общем VS прав, но в данном случае он явно 'перебдел'  smile Так что можно отключить в этом месте этот варнинг и жить спокойно  smile 

PM MAIL   Вверх
azesmcar
Дата 25.1.2011, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(xvr @  25.1.2011,  13:37 Найти цитируемый пост)
Ну в общем VS прав, но в данном случае он явно 'перебдел'   Так что можно отключить в этом месте этот варнинг и жить спокойно   

Да дело то не в варнинге, деструктор на самом деле не вызывается. smile 
PM   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.