![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
newbie2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 6.2.2006 Репутация: нет Всего: нет |
Немного не понятно...
В силу ограничений auto_ptr, возникает вопрос... Какое практическое применение имеет auto_ptr? Кроме возвращения указателя из функции? Приведите пожалуйста примеры. В остальных случаях можно ведь обойтись и обычными локальными переменными? |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
newbie2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 6.2.2006 Репутация: нет Всего: нет |
Нет, я имел в виду следующее: 1) в случае функции имел в виду возвращение auto_ptr, а не голого указателя 2) в случае локальных переменных имел в виду следующее: вместо использования auto_ptr вполне можно обойтись использованием обычных локальных объектов, т.к. они выделяются в статической памяти и в случае exceptions деструкторы сработают. То есть, как я понял, их применение только в возвращении с функций (и то, можно обойтись без auto_ptr), и для реализации RAII в конструкторах? И всё?.. Больше нигде не применяется? |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
нет. обойтись то можно чем угодно. просто если есть необходисомть в диначмическом создании и контроле времени жизни объекта, то auto_ptr приходит на помощь. А лучше сразу брать умные указатели из boost. из-за особенностей реализации. |
|||
|
||||
Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
auto_ptr появился в ответ на печальную статистику: большая часть ошибок в промышленном коде - это утечки памяти. Если вы можете обходиться без работы с динамической памятью - ваше счастье, обходитесь. Большие программы, которые стоят денег (в частности, enterprise не для публичного пользования) чаще всего не могут, это объективная реальность.
-------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
newbie2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 6.2.2006 Репутация: нет Всего: нет |
Понятно, спасибо за ответы.
Применение умных указателей из boost я могу понять (хотя и не изучал их пока), у них возможностей больше. Просто я, чтобы не создавать утечку памяти, использую vector, basic_string и т.п. вместо их низкоуровневых аналогов, работающих с динамической памятью... и пока что мне сложно представить ситуацию, когда не обойтись без динамического создания объектов, но можно воспользоваться auto_ptr... Было бы хорошо, если приведёте пример (можно схематично). Единственное исключение - RAII - тут, похоже, действительно auto_ptr незаменимы... |
|||
|
||||
Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Ой, а можно отправить к классикам...
Мейерс. Наиболее эффективное использование С++. Приложение 2. Реализация шаблона auto_ptr (начинается словами: "В правилах 9,10, 26, 31 и 32 упоминается исключительная полезность шаблона auto_ptr".) Джосаттис. Глава 4. Пункт: "Подробное описание класса auto_ptr". Можно еще поискать. Упомянутые книжки есть в сети. На самом деле сильно глубоко разбираться с auto_ptr я смысла не вижу - это одна из первых реализаций умных указателей, которая получила признание, достаточное для включения в Стандарт. Реализация не самая удачная, как показала последующая история. Сегодня имеет смысл сразу разбираться с с тем, что есть в boost, а не ворошить прошлое. Это сообщение отредактировал(а) Ulysses4j - 12.6.2007, 21:17 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Именно поэтому, новый стандарт объявит auto_ptr устаревшим(deprecated) и введёт unique_ptr который будет в большей степени отвечать семантике перемещения, чем его предшественник auto_ptr.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
newbie2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 6.2.2006 Репутация: нет Всего: нет |
Спасибо за исчерпывающий ответ
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |