| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > smart pointer |
| Автор: fear 24.2.2010, 21:07 | ||
| Нужен умный указатель, который бы освобождал память, занимаемую связанным с ним объектом, в том случае, если объект больше не используется (на объект не указывает ни один указатель). При этом умный указатель должен вести себя как и безумный стандартный, например, должна быть возможность динамически связать его как с объектом базового класса, так и с производным от базового. Boost пользовать в проекте только из-за одного класса не хочется. В итоге, получился такой код. Но как то хочется его допилить и сделать более элегантным, есть идеи?
|
| Автор: azesmcar 24.2.2010, 21:12 | ||
| Лучше не выдумывай велосипеды а подключи boost, проблем с таким smartPointer-ом потом не оберешься. Аппетит приходит во время еды, подключишь boost и сразу появятся другие функции, которые понадобяться. Там много полезного. Просто пару замечаний, которые сразу попались на глаза, не вдавался в подробности 1. Зачем нужно наследование?
2. Где функция для НЕ константного указателя? Так выходит что можно вызывать только константные функции класса. 3. Что возвращяет функция в случае else? Ничего, что будет? Неясно. 4. mutable какой-то явно тут не нужный... в общем хочешь хороший smart pointer - используй boost, ну или скопируй оттуда в крайнем случае. |
| Автор: fear 24.2.2010, 21:26 | ||||||||
чтобы могли сделать так: SmartPointer<ObjectA> a = b; если есть альтернативное решение, привести один класс умного указателя к другому (для случая, когда упровляемые объекты наследуются один от другого), оч интересно послушать
они обязательно появяться в рабочем варианте, счас постарался разгрузить код чтобы лучше читался
Это интересный вопрос
можно и без него |
| Автор: azesmcar 24.2.2010, 21:31 |
| fear Честно говоря сейчас лень смотреть, я по вечерам ленивый..если не будет ответов утром с работы подробно прокомментирую. |
| Автор: fear 24.2.2010, 23:02 | ||
участие в обсуждении темы по желанию, любое мнение ценно |
| Автор: andrew_121 24.2.2010, 23:15 |
установи нормальный компилятор, тогда буст тягать не придется. т.к. все уже встроено. и смарт поинтеры в том числе. |
| Автор: fear 24.2.2010, 23:22 | ||
это что за компиляторы такие, в которых все встроено? |
| Автор: andrew_121 24.2.2010, 23:23 |
| 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 24.2.2010, 23:42 | ||||
лямбда функции это хорошо, а вот умных указателей я не увидел, можно примерчик? да и сыровата версия 4.4.3 пока еще, не говоря уже о 4.4.5.
спасибо конечно, но виндовс мне не нада, упоси |
| Автор: andrew_121 24.2.2010, 23:51 | ||
это релиз упс, опечатался. gcc-4.5.0. да, сыровата. но тесты все проходит. все что я этой версией компилил, работает без глюков.
Добавлено через 2 минуты и 28 секунд тогда не понятно в чем проблема? смарт поинтеры появились начиная с версии 4.4.0 |
| Автор: fear 25.2.2010, 00:16 | ||||||
ага, но свежий очень
я что-то и не заметил, над посматреть
лень проблема |
| Автор: andrew_121 25.2.2010, 00:23 |
да, у них с этим туго. я недели две назад пытался 4.4.2 установить. дня два бился. не сумел :( да только эта и есть. остальные версии нужно с сорцов ставить. но там сложностей не возникает. |
| Автор: fear 25.2.2010, 00:35 | ||
сложности появяться когда пересобирать все будешь под новую версию |
| Автор: andrew_121 25.2.2010, 00:55 | ||
никаких сложностей. разве что варнингов больше. ибо проверка типов более строгая. самый стандартный варнинг:
|
| Автор: bsa 25.2.2010, 17:03 |
| fear, имей в виду, что andrew_121 говорит про фичи, которые будут в БУДУЩЕМ стандарте С++, но которые поддерживаются GCC в экспериментальном режиме (нужно указывать специальный ключ). Пока стандарт не принят, лучше использовать старый добрый boost. |
| Автор: andrew_121 25.2.2010, 17:46 |
как бы да. но, обратно все равно не вернется. раз уж начали реализовывать новый стандарт все производители компиляторов, то нужно не опоздать на него особенно если учесть, что все самое нужное(thread, mutex, smart pointers, function, lambda, bind, и т.д.), уже есть поддерживающих его компиляторах. Добавлено через 2 минуты и 52 секунды а как же микрософтстудия2010? там ведь это отключить невозможно? |
| Автор: fear 25.2.2010, 18:06 | ||||||
да, я это понимаю, по этой причине и пример выше над подредактировать, собирать надо с ключем -std=c++0x
не хотелось бы, как, впрочем, и не хочется городить костыли; кстати shared_ptr в стандартную библиотеку собирается прийти как раз оттуда andrew_121, на счет проблем не так все просто, поставить gcc 4.5 можно оказывается даж из портов, но вот собрать ту же qt с его помощью под mac не такая как оказалась простая задача |
| Автор: fear 25.2.2010, 18:43 | ||||||
не обновили пока значит
это под линухом так cc1plus: error: unrecognized command line option "-arch" |
| Автор: fear 1.3.2010, 19:03 |
| буду пользовать boost |