![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
BasMan |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Еще не сильно в шаблоны углубился, есть такой код:
Как сюды можно прикрутить умные указатели? В частности auto_ptr? Фабрика создается:
затем регистрируем на ней класс
соответственно такое извращение не прокатит ![]()
Основной вопрос, каким образом вместо базового класса объектов фабрики (clsExecutorInterface*) подсунуть std::auto_ptr<clsExecutorInterface>, все мозги сломал уже ![]() Заранее спасибо. Это сообщение отредактировал(а) BasMan - 11.3.2009, 22:00 |
||||||||
|
|||||||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
А если сделать еще один класс, который будет "контейнером" для clsExecutorInterface, и будет заниматься подсчетом количества ссылок и автоубиением экземпляра clsExecutorInterface? Помоему было бы неплохо.
p.s. У меня наследники clsExecutorInterface подгружаются из so библиотек, все вроде бы работает, но надоело постоянно приглядывать за указателями, а если проект будет разрастаться, то думаю будут неизбежны утечки памяти. |
|||
|
||||
azesmcar |
|
||||||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
auto_ptr это не умный указатель. Умный указатель ведет подсчет ссылок, auto_ptr - нет.
как некрасиво ![]()
этот каст ну ни к чему...
а это зачем нужно? вообще код ужасно надуманный и нечитабельный... функция возвращяет void * притом что у тебя класс инстанцирован типом который тебе нужно вернуть, и вообще зачем этот класс? И даже не один а два..
что это??? почему не так
если тебе нужен auto_ptr - то пусть функция Create возвращает сразу auto_ptr..только не забывай в классе деструктор виртуальным сделать. А то auto_ptr его удалит по базовому указателю будет тебе memory leak. |
||||||||||||
|
|||||||||||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
вот так хорошо? Это сообщение отредактировал(а) azesmcar - 12.3.2009, 14:16 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
дальше не читал. сразу фтопку... |
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Fazil6, глазами прочесть "в топку", а совершить кучу действий чтобы оставить пустой пост таки нужно было ;)
azesmcar спасибо, сегодня вечером попробую. Код кстати не мой, не помню где нашел, просто в основном то все понятно с шаблонами, и простые реализация сам могу написать, а такое чтобы и фабрика и умные указатели сразу в одном, пока сложновато. Это сообщение отредактировал(а) BasMan - 12.3.2009, 16:30 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
BasMan, ну твой, не твой..а на минусы его указать стоит
![]() удачи |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
ну в принципе это термин, спорить тут бессмысленно. Я посмотрел, действительно для Smart Pointer ничего не сказано что он должен вести подсчет ссылок. Наверное откуда-то засело в памяти. Но это по моему не так актуально, называть его можно как угодно. В конце концов Элджер в своей книге вообще разделил на глупые, умные, мудрые и гениальные указатели. Добавлено через 2 минуты и 5 секунд
вообще это красивое решение возвращять из фабрики умный указатель. |
||||
|
|||||
BasMan |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Время наконец то выдалось, проблема в следующем, компилятор (gcc 3.4.2) на данный код:
ругается:
Как я понял он не видит objectCreator, причем CodeBlocks видит objectCreator, например в теле factory начинаешь набирать factory:: он вываливает список содержимого factory в т.ч. и objectCreator. Если вынести из класса и объявить возвращаемый тип как void*:
то все успешно компиляется Это сообщение отредактировал(а) BasMan - 14.3.2009, 10:59 |
||||||
|
|||||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Добавь typename перед обявлением итератора..я забыл |
|||
|
||||
BasMan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.7.2005 Репутация: нет Всего: нет |
Итоговый вариант
![]()
Все вроде бы работает ![]() Большое спасибо, а код думаю еще кому-нибудь будет полезен. p.s. Решил не поскупиться, заказал бумажный вариант книг Страуструпа и Александреску. Это сообщение отредактировал(а) BasMan - 14.3.2009, 17:04 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Сатера не забудь ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |