![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Нужен умный указатель, который бы освобождал память, занимаемую связанным с ним объектом, в том случае, если объект больше не используется (на объект не указывает ни один указатель). При этом умный указатель должен вести себя как и безумный стандартный, например, должна быть возможность динамически связать его как с объектом базового класса, так и с производным от базового. Boost пользовать в проекте только из-за одного класса не хочется.
В итоге, получился такой код. Но как то хочется его допилить и сделать более элегантным, есть идеи?
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Лучше не выдумывай велосипеды а подключи boost, проблем с таким smartPointer-ом потом не оберешься. Аппетит приходит во время еды, подключишь boost и сразу появятся другие функции, которые понадобяться. Там много полезного.
Просто пару замечаний, которые сразу попались на глаза, не вдавался в подробности 1. Зачем нужно наследование?
2. Где функция для НЕ константного указателя? Так выходит что можно вызывать только константные функции класса. 3. Что возвращяет функция в случае else? Ничего, что будет? Неясно. 4. mutable какой-то явно тут не нужный... в общем хочешь хороший smart pointer - используй boost, ну или скопируй оттуда в крайнем случае. Это сообщение отредактировал(а) azesmcar - 24.2.2010, 21:14 |
|||
|
||||
| fear |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
чтобы могли сделать так: SmartPointer<ObjectA> a = b; если есть альтернативное решение, привести один класс умного указателя к другому (для случая, когда упровляемые объекты наследуются один от другого), оч интересно послушать
они обязательно появяться в рабочем варианте, счас постарался разгрузить код чтобы лучше читался
Это интересный вопрос
можно и без него Это сообщение отредактировал(а) fear - 24.2.2010, 21:27 |
||||||||
|
|||||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
fear
Честно говоря сейчас лень смотреть, я по вечерам ленивый..если не будет ответов утром с работы подробно прокомментирую. |
|||
|
||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
участие в обсуждении темы по желанию, любое мнение ценно |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
установи нормальный компилятор, тогда буст тягать не придется. т.к. все уже встроено. и смарт поинтеры в том числе. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
это что за компиляторы такие, в которых все встроено? |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
gcc-4.4.3 и выше. а gcc-4.4.5 уже и лямбда поддерживает. и extern template.
Добавлено через 1 минуту и 4 секунды под вендавз это mingw32 зовется. Добавлено через 2 минуты и 1 секунду а вообще тут все описано: http://gcc.gnu.org/gcc-4.5/cxx0x_status.html -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fear |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
лямбда функции это хорошо, а вот умных указателей я не увидел, можно примерчик? да и сыровата версия 4.4.3 пока еще, не говоря уже о 4.4.5.
спасибо конечно, но виндовс мне не нада, упоси Это сообщение отредактировал(а) fear - 24.2.2010, 23:42 |
||||
|
|||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
это релиз упс, опечатался. gcc-4.5.0. да, сыровата. но тесты все проходит. все что я этой версией компилил, работает без глюков.
Добавлено через 2 минуты и 28 секунд тогда не понятно в чем проблема? смарт поинтеры появились начиная с версии 4.4.0 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fear |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
ага, но свежий очень
я что-то и не заметил, над посматреть
лень проблема Это сообщение отредактировал(а) fear - 25.2.2010, 00:17 |
||||||
|
|||||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
да, у них с этим туго. я недели две назад пытался 4.4.2 установить. дня два бился. не сумел :( да только эта и есть. остальные версии нужно с сорцов ставить. но там сложностей не возникает. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
сложности появяться когда пересобирать все будешь под новую версию |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
никаких сложностей. разве что варнингов больше. ибо проверка типов более строгая. самый стандартный варнинг:
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
fear, имей в виду, что andrew_121 говорит про фичи, которые будут в БУДУЩЕМ стандарте С++, но которые поддерживаются GCC в экспериментальном режиме (нужно указывать специальный ключ).
Пока стандарт не принят, лучше использовать старый добрый boost. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
как бы да. но, обратно все равно не вернется. раз уж начали реализовывать новый стандарт все производители компиляторов, то нужно не опоздать на него особенно если учесть, что все самое нужное(thread, mutex, smart pointers, function, lambda, bind, и т.д.), уже есть поддерживающих его компиляторах. Добавлено через 2 минуты и 52 секунды а как же микрософтстудия2010? там ведь это отключить невозможно? Это сообщение отредактировал(а) andrew_121 - 25.2.2010, 17:47 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fear |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
да, я это понимаю, по этой причине и пример выше над подредактировать, собирать надо с ключем -std=c++0x
не хотелось бы, как, впрочем, и не хочется городить костыли; кстати shared_ptr в стандартную библиотеку собирается прийти как раз оттуда andrew_121, на счет проблем не так все просто, поставить gcc 4.5 можно оказывается даж из портов, но вот собрать ту же qt с его помощью под mac не такая как оказалась простая задача |
||||||
|
|||||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
у меня без проблем собралась. и буст тоже(но чуток пришлось подправить). посмотри дату того из портов. т.к. 4.5.0 выходит раз в неделю(иногда два). последняя сборка - 2010.02.18 Добавлено @ 18:25 вообще то, 4.4.3 зарелизен месяц назад. Добавлено @ 18:26 мне не нужно подключать этот хидер. мало того, из bits/ ничего нельзя подключать напрямую. препроцессор орет, и завершается. Добавлено @ 18:27
так все оттуда Это сообщение отредактировал(а) andrew_121 - 25.2.2010, 18:28 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| fear |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
не обновили пока значит
это под линухом так cc1plus: error: unrecognized command line option "-arch" |
||||||
|
|||||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
буду пользовать boost
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |