Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > auto_ptr |
Автор: newbie2 12.6.2007, 17:24 |
Немного не понятно... В силу ограничений auto_ptr, возникает вопрос... Какое практическое применение имеет auto_ptr? Кроме возвращения указателя из функции? Приведите пожалуйста примеры. В остальных случаях можно ведь обойтись и обычными локальными переменными? |
Автор: newbie2 12.6.2007, 18:28 | ||
Нет, я имел в виду следующее: 1) в случае функции имел в виду возвращение auto_ptr, а не голого указателя 2) в случае локальных переменных имел в виду следующее: вместо использования auto_ptr вполне можно обойтись использованием обычных локальных объектов, т.к. они выделяются в статической памяти и в случае exceptions деструкторы сработают. То есть, как я понял, их применение только в возвращении с функций (и то, можно обойтись без auto_ptr), и для реализации RAII в конструкторах? И всё?.. Больше нигде не применяется? |
Автор: Daevaorn 12.6.2007, 19:01 | ||||
нет. обойтись то можно чем угодно. просто если есть необходисомть в диначмическом создании и контроле времени жизни объекта, то auto_ptr приходит на помощь. А лучше сразу брать умные указатели из boost.
из-за особенностей реализации. |
Автор: Ulysses4j 12.6.2007, 19:03 |
auto_ptr появился в ответ на печальную статистику: большая часть ошибок в промышленном коде - это утечки памяти. Если вы можете обходиться без работы с динамической памятью - ваше счастье, обходитесь. Большие программы, которые стоят денег (в частности, enterprise не для публичного пользования) чаще всего не могут, это объективная реальность. |
Автор: newbie2 12.6.2007, 19:40 |
Понятно, спасибо за ответы. Применение умных указателей из boost я могу понять (хотя и не изучал их пока), у них возможностей больше. Просто я, чтобы не создавать утечку памяти, использую vector, basic_string и т.п. вместо их низкоуровневых аналогов, работающих с динамической памятью... и пока что мне сложно представить ситуацию, когда не обойтись без динамического создания объектов, но можно воспользоваться auto_ptr... Было бы хорошо, если приведёте пример (можно схематично). Единственное исключение - RAII - тут, похоже, действительно auto_ptr незаменимы... |
Автор: Ulysses4j 12.6.2007, 20:22 |
Ой, а можно отправить к классикам... Мейерс. Наиболее эффективное использование С++. Приложение 2. Реализация шаблона auto_ptr (начинается словами: "В правилах 9,10, 26, 31 и 32 упоминается исключительная полезность шаблона auto_ptr".) Джосаттис. Глава 4. Пункт: "Подробное описание класса auto_ptr". Можно еще поискать. Упомянутые книжки есть в сети. На самом деле сильно глубоко разбираться с auto_ptr я смысла не вижу - это одна из первых реализаций умных указателей, которая получила признание, достаточное для включения в Стандарт. Реализация не самая удачная, как показала последующая история. Сегодня имеет смысл сразу разбираться с с тем, что есть в boost, а не ворошить прошлое. |
Автор: archimed7592 12.6.2007, 22:44 |
Именно поэтому, новый стандарт объявит auto_ptr устаревшим(deprecated) и введёт unique_ptr который будет в большей степени отвечать семантике перемещения, чем его предшественник auto_ptr. |
Автор: newbie2 14.6.2007, 09:40 |
Спасибо за исчерпывающий ответ |