![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| hsilgos |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 26.4.2009 Репутация: 1 Всего: 2 |
Не будет утечки памяти. Тут будет следующая коснтрукция:
Ну конечно, лучше использовать свой велосипед. Он ведь свой, родной
Да нет же... Вот, к примеру, в wxWidgets есть набор классов для работы с XML. Там документ можно и нужно создавать статически, а "ветви" ему уже нужно подсовывать созданные в куче. Он их затем сам удаляет. И многие вещи так работают: иерархии классов окошечных классов во многих гуишных библиотеках и пр... |
||||||||
|
|||||||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
удалил чтоб' не позориться...
Это сообщение отредактировал(а) Леопольд - 28.6.2009, 02:43 -------------------- вопросов больше чем ответов |
|||
|
||||
| hsilgos |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 26.4.2009 Репутация: 1 Всего: 2 |
Да с чего ж вы решили, что здесь будет меморилик? Не будет. Объект класса Modify возьмет владение объектом и при завершении функции благополучно освободит память.
Ну, для этого нужны минимальные знания о том, что при срабатывании конструтора копирования или оператора = передается владение другому объекту. Добавлено через 1 минуту и 52 секунды Я ведь не говорю о тотальном использовании shared_ptr ? Каждому инструменту - своё место. shared_ptr - у место для простейшего автоосвобождения. |
||||
|
|||||
| Леопольд |
|
||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Ошибся, утечки не будет. Но я уверен что тот кто это написал бы Дело в том что это не велосипед, и даже не педаль от него. Они сложнее устроены... Можно разобраться в auto_ptr, а можно использовать свой примитив. На самом деле, второй вариант даже быстрее и меньше шансов что поймёшь его немножко неправильно. Добавлено @ 02:42
Что то я и правда туплю... :( Добавлено @ 02:42 Но всё равно, auto_ptr работает не интуитивно! Добавлено @ 02:47
Это не те функции которые вызываются 90% времени работы программы, я прав? Это сообщение отредактировал(а) Леопольд - 28.6.2009, 09:33 -------------------- вопросов больше чем ответов |
||||||||||||||
|
|||||||||||||||
| hsilgos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 26.4.2009 Репутация: 1 Всего: 2 |
Что да, то да. Я его и не использую для серьезных задач. Однако чтобы не плодить try/catch и не копипастить освобождение ресурсов во всех точках выхода из функции auto_ptr работает замечательно. И для его успешного применения достаточно знать минимум: передача владения и reset/release. Кода становится меньше и понятнее. Несмотря на неочевидность auto_ptr |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Наверное Вы имели ввиду всё же auto_ptr Я теперь вообще не понимаю как у него может быть утечка памяти из-за auto_ptr... Тут больше похоже что утечка из-за класса, завёрнутого в auto_ptr. -------------------- вопросов больше чем ответов |
|||
|
||||
| hsilgos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 26.4.2009 Репутация: 1 Всего: 2 |
да, спать уже пора. Голова думает одно, а руки по-привычке набирают другое Это сообщение отредактировал(а) hsilgos - 28.6.2009, 03:00 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Если у своего примитива та же политика удаления, то писать его еще менее интуитивно, так как вместо того чтоб использовать общеизвестный инструмент, у которого есть документация, Вы предлагаете отвлекать программиста на написание/изучение "примитива". Даже если это и занимает 5 минут - лучше потратить это время на изучение std::auto_ptr. Или вас не устраивает название ? так на крайний случай просто замените имя : typedef std::auto_ptr auto_delete (хотя это тоже путь в сторону) Не нравятся такие конструкции ? правильно. Но это не проблема auto_ptr, a программиста который такое написал |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Честно говоря, я не понял о чём речь... Добавлено @ 18:54 Дело в том что этот примитив запрещает копирование и т.д. Т.е. программист не сможет использовать его не по назначению - авто чистка памяти. Им нельзя пользоваться как указателем, это примитивный уборщик мусора. Мне кажется что этого описания достаточно для безошибочного использования. Конечно, при условии что программист понимает как создаются и разрушаются локальные объекты. А вот с auto_ptr надо помнить что нельзя с ним делать, а что можно. Это конечно не проблема, но всё равно, лучше помнить что-то другое Время, которе будет потрачено на осмысление его функции измеряется в секундах. Это писал я его 5 минут... Это сообщение отредактировал(а) Леопольд - 28.6.2009, 20:20 -------------------- вопросов больше чем ответов |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Почему нельзя что-то делать с auto_ptr? Можно! Более того, я так понимаю, он и создан для этого.
Кстати, по моему в boost есть более подходящая вещь - scoped_ptr. Я правда не изучал его, но подозреваю, что это то, что нужно. Это сообщение отредактировал(а) bsa - 28.6.2009, 23:41 |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Никто не говорит что нельзя. Можно пользоваться MFC а не wxWidgets (предположим что целевая платформа исключительно Win), но на мой взгляд wxWidgets лучше спроектирован и удобнее в использовании. Дело вкуса. Я тоже так думаю, что для целей авточистки можно найти что-то более подходящее чем auto_ptr... Добавлено через 14 минут и 8 секунд scoped_ptr (scoped_array) действительно то что надо. Он делает то-же самое что и мой кустарный класс, только больше -------------------- вопросов больше чем ответов |
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
auto_ptr советует использовать Брюс Эккель.
И вобще, смысл пихать в stl auto_ptr если он лажа? Это сообщение отредактировал(а) lv151 - 29.6.2009, 10:47 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
из учебника "Философия С++"? страницу не подскажите? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
не поленился перенабрать с книжки "Язык программирования С++. Вводный курс. 4 издание" (Липпман)
Ограничения класса auto_ptr Шаблон класса auto_ptr предоставляет удобный и безопасный способ работы с объектами, размещенными в динамически распределенной памяти. Чтобы правильно использовать класс auto_ptr, следует жестко придерживаться ограничений, которые налагает этот класс.
|
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |