|
|
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Ребята, просветите что лучше использовать auto_ptr или new + delete. или в принципе разницы никакой нет, просто при использовании auto_ptr ненужно заботится о том чтоб не забыть сделать delete обьекту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 13:13 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
auto_ptr'ом надо уметь пользоваться, иначе потом будет много отрицательных эмоций. Лучше взять что-нибудь из boost. Хотя ежели разницы нет то проект небольшой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 13:36 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Главное - это уяснить, что голые new + detele поценциально опасны. А далее уже надо выбирать среди std::auto_ptr, boost::share_ptr и т.п. по тому, какая стратегия владения вам необходима. std::auto_ptr при копировании всегда передает право владения копии, boost::shared_ptr хранит указатель до тех пор, пока существует хотя бы одна ссылка на него. Вы можете показать как вы будете использовать эти объекты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:00 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков пишет: > Главное - это уяснить, что голые new + detele поценциально опасны. А .... при наличии исключений . Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:03 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Даже если бы в С++ не было исключений, никто не исключает возможность банально забыть освободить память (memory leak), присвоить указателю новое значение (memory leak). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:05 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
.... при наличии исключений . ... return тоже неплохо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:06 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
... как и любой выход из влока, break к примеру в цикле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:08 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
суммарно: - любой из smart_ptr представляет реализацию более общей идиомы RAII для управления ресурсом памяти (очень важно при работе с исключениями, и не только) - реализация std::auto_ptr призвана обеспечить минимальный (м.б. нулевым) overhead по сравнению с обычными указателями, но платой за это является отсутствие полноценной семантики копирования (очень важно для работы с контейнерами, так же передача параметров по значению) отсюда область применения -- локальные блоки, иначе альтернатива boost::shared_ptr (или еще чего) - если вас интересует случай new[], то тут используются std::vector, boost::shared_array (или еще чего), но не auto_ptr /* поправьте если чего не так */ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 15:02 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир пишет: Рибяты йа нидумал о таких прастых вищах. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 15:59 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковДаже если бы в С++ не было исключений, никто не исключает возможность банально забыть освободить память (memory leak), присвоить указателю новое значение (memory leak). это лечится новыми руками от ушей. опять же зависит от кривизны рук. если сразу ничего не удаляете, то никогда ничто вам не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 16:07 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Да-да, вы с детства программируете без утечек памяти и пользовались всю жизнь только голыми указателями ;) Skope guard-ы решают перечисленные здесь проблемы и позволяют получить ясность в вопросах связанные с временем жизни динамических объектов. Вы, я так понял, ратуете за выпремление рук - как вы собираетесь достич этой цели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 16:39 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Рибяты йа нидумал о таких прастых вищах. панемайу! но для аффтора топега возможна фсе не так проста.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:25 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Да-да, вы с детства программируете без утечек памяти и пользовались всю жизнь только голыми указателями ;) да, было время в детстве на plain C лабали ;) а некоторые на нем и до сих пор рисуют и ничего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:28 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков... и пользовались всю жизнь только голыми указателями ;) только её половину..., потом на ссылки перешел.. ;) sashka304 Ребята, просветите что лучше использовать auto_ptr или new + delete. Для какой задачи? Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:30 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
ErV Анатолий Широков... и пользовались всю жизнь только голыми указателями ;) только её половину..., потом на ссылки перешел.. ;) sashka304 Ребята, просветите что лучше использовать auto_ptr или new + delete. Для какой задачи? Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr? А потом их становится два, и ежели 2-ой не выделился нужно вернуть первый. И так без конца один и тотже спор. Что лучше быть богатым тормозом или бедным шустряком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:46 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
лучще быть богатым тормозом :)) вообщем у меня пока выделение памяти под объект происходит в одном классе, раньше часть кода была написана с new и delete, а мне вот надо немного дописать и переписать, вот я думаю использовать auto_ptr или делать как там и было... обьектиков в разных ф-ях создается от 1 до 10. Почитав посты думаю всетаки сделаю я auto_ptr :) спасибо, ребята, большое!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 19:06 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковДа-да, вы с детства программируете без утечек памяти и пользовались всю жизнь только голыми указателями ;) Skope guard-ы решают перечисленные здесь проблемы и позволяют получить ясность в вопросах связанные с временем жизни динамических объектов. Вы, я так понял, ратуете за выпремление рук - как вы собираетесь достич этой цели? я за нормальный код. на самом деле руки тут и ни при чем. и я знаю (работаю) с проектом в 100к строк. и там сделано все нормально. любая динамика повешена на SOFT_FREE или SOFT_DELETE. это - простые дефайны, облегчившие и решившие большинство задач. для прочей прстоты используются СОБСТВЕННЫЕ манагеры, т.к. они и быстрее и понятней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 21:18 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
blinded А потом их становится два, и ежели 2-ой не выделился нужно вернуть первый. И так без конца один и тотже спор. Что лучше быть богатым тормозом или бедным шустряком. Если я точно знаю, где и как обьект будет использоваться, то можно и без auto_ptr обойтись. Тем более, как я понял, для конструкции типа SomeClass** (динамически выделяется массив указателей, для указателей создяются обьекты, потом указатели сортируются) это не вариант. Спорить не буду - не вижу смысла. (так как выльется в очередной холивар типа "исключения - за и против" и "кто-нибудь обьяснит мне чем Дельфи лучше C++") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 03:14 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
ErV : Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr? однакож, если в конструкторе выделяется память а потом происходит неперехваченное исключение, то до деструктора дело просто не доходит == memory leak об этом тоже стоит помнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 11:45 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир ErV : Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr? однакож, если в конструкторе выделяется память а потом происходит неперехваченное исключение, то до деструктора дело просто не доходит == memory leak об этом тоже стоит помнить Насколько я помню, если класс (в котором выделяется блок памяти) используется в программе как SomeClass someclass; //а не SomeClass* someclass; произойдет раскрутка стека, и будет вызван деструктор. При исключении в конструкторе, если оно не было обработано, работа программы завершается, а системные ресурсы, используемые процессом, под Win, если я не ошибаюсь, освобождаются по факту его завершения. Можете проверить: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 13:18 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Память не высвобождается, но система в нокаут не уходит. WinXP, по крайней мере... исчо раз: при неперехваченном исключении в конструкторе, объект не считается созданным и его деструктор не вызывается если дело происходит внутри сервиса (дЭмона), то скорей всего исключение перехватывается на более высоком уровне и пишется в лог, работа продолжается, утечка накапливается и через некоторое время сервер "станет раком" "и это очень плохо" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 13:51 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир Память не высвобождается, но система в нокаут не уходит. WinXP, по крайней мере... исчо раз: при неперехваченном исключении в конструкторе, объект не считается созданным и его деструктор не вызывается если дело происходит внутри сервиса (дЭмона), то скорей всего исключение перехватывается на более высоком уровне и пишется в лог, работа продолжается, утечка накапливается и через некоторое время сервер "станет раком" "и это очень плохо" 1) и что, прям auto_ptr это решает? не верю. 2) в том числе и поэтому я за нормальный код (т.е. без корявых исключений). все гораздо проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 20:04 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Aklin1) и что, прям auto_ptr это решает? не верю. 2) в том числе и поэтому я за нормальный код (т.е. без корявых исключений). 1)Представь себе да решает 2)А за тебя все уже решили, оператор new это делает почем зря C++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 21:12 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
blinded Aklin1) и что, прям auto_ptr это решает? не верю. 2) в том числе и поэтому я за нормальный код (т.е. без корявых исключений). 1)Представь себе да решает 2)А за тебя все уже решили, оператор new это делает почем зря 1) все равно не верю 1.1) если и решает, то коряво 1.1.1) а ты не думал, зачем программисту дали такую свободу? чтобы он сам все нормально делал. 2) new - не есть нормальный код ? самый что ни есть нормальный а вот исключения как уже говорилось - плохо. [quote] C++[/quote] не совсем согласен, ибо не я работю на си, а он на меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 16:04 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
1) все равно не верю 1.1) если и решает, то коряво вариант 1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. вариант 2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. впрочем есть еще альтернатива try/catch 2) new - не есть нормальный код ? самый что ни есть нормальный а вот исключения как уже говорилось - плохо. тут дело в том, что исключения это часть современного C++ - поэтому, либо вы контролируете весь свой код, включая библиотеки - либо plain old C - либо миритесь с тем, что new A() может высвать исключение "такие дела" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 16:25 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34390247&tid=2029240]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
205ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 552ms |

| 0 / 0 |
