|
|
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
1) Наш мир не совершенен и auto_ptr тоже. Наппример с масивами он не работает. Однако же это средство стандартное, а по мне армейский принцип: хоть безобразно, зато единообразно. приобретает вса большую актуальность. 2) Должен разочаровать, в вашем понимании new ненормален. Он позволяет себе при нехватке памяти генерировать bad_alloc. Так что присоединяйтесь C++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 16:48 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
а по мне армейский принцип: хоть безобразно, зато единообразно. хехе. а кто меня извращенцем обзывал ? ;) new позволяет себе при нехватке памяти генерировать bad_alloc более того, еще возможны исключения в конструкторах создаваемых объектов впрочем для POD и простых классов этого можно легко избежать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 17:24 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
обоим: 1) чей-то я не особо понял ,чего такого мне пытались показать 2) new рулит. 3) исключения - штука хорошая с закрытых помещениях, т.е. не ломающая логику программы 3.1) даже с исключениями есть SAFE_DELETE который вполне сносно используется при исключениях. 3.1.1) а еще есть манагеры собственные.... 3.1.....1) короче не просто не убедили, но и укрепили. аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 17:31 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Aklin 1) чей-то я не особо понял ,чего такого мне пытались показать Пытались показать что использование RAII значительно упрощает жизнь Aklin 2) new рулит. Совсем не по-детски и в неожиданном для вас направлении. Ну не желаете вы пользоваться исключениями, а он это делает, даже в тех случаях когда вы уверены что это не такю Удинственный способ его "исправить" ключик у компилятора включить:) Aklin 3) исключения - штука хорошая с закрытых помещениях, т.е. не ломающая логику программы Вы не любите кошек? Да вы просто не умеете их готовить!:) Мы по этому поводу отношения выяснили здесь Aklin 3.1) даже с исключениями есть SAFE_DELETE который вполне сносно используется при исключениях. 3.1.1) а еще есть манагеры собственные.... Ты бы показал нам темным как надо. Просвяти, покажи! А то вот живем и не знаем как надо. Ну а мы потрепем, может родим такое что вуликие гуру будут опыт перенимать. Aklin 3.1.....1) короче не просто не убедили, но и укрепили. Укрепеился в вере? Земля плоская и на 3 слонах? Ну ладно, я не настаиваю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2007, 19:00 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
blinded Пытались показать что использование RAII значительно упрощает жизнь не убедили. blinded Совсем не по-детски и в неожиданном для вас направлении. Ну не желаете вы пользоваться исключениями, а он это делает, даже в тех случаях когда вы уверены что это не такю Удинственный способ его "исправить" ключик у компилятора включить:) я говорил, что использование исключений только в закрытых пространствах. blinded Вы не любите кошек? Да вы просто не умеете их готовить!:) Мы по этому поводу отношения выяснили здесь читал, читал и отвечал. результатом стало то, что исключения кривые и работа с ними плоха. кроме этого есть статик, глобал и много прочих полезных штук. я за исключения только в исключтельных случаях(с) и в закрытых простанствах. blinded Ты бы показал нам темным как надо. Просвяти, покажи! А то вот живем и не знаем как надо. Ну а мы потрепем, может родим такое что вуликие гуру будут опыт перенимать. Код: plaintext 1. 2. 3. blinded Укрепеился в вере? Земля плоская и на 3 слонах? Ну ладно, я не настаиваю. в том что исключения кривые а дополнительные настрйки неповоротливы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 10:25 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
а ну да, есть еще одноа прикольная конструкция приглушающая ваши доводы. Код: plaintext 1. 2. 3. аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 10:27 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Aklin blinded Пытались показать что использование RAII значительно упрощает жизнь не убедили. Значит плохие убеждальщики. Но мы будем продолжать Aklin blinded Совсем не по-детски и в неожиданном для вас направлении. Ну не желаете вы пользоваться исключениями, а он это делает, даже в тех случаях когда вы уверены что это не такю Удинственный способ его "исправить" ключик у компилятора включить:) я говорил, что использование исключений только в закрытых пространствах. А как быть с new? Но об этом ниже. Aklin blinded Вы не любите кошек? Да вы просто не умеете их готовить!:) Мы по этому поводу отношения выяснили здесь читал, читал и отвечал. результатом стало то, что исключения кривые и работа с ними плоха. кроме этого есть статик, глобал и много прочих полезных штук. я за исключения только в исключтельных случаях(с) и в закрытых простанствах. Ну это вы сделали такой вывод Aklin blinded Ты бы показал нам темным как надо. Просвяти, покажи! А то вот живем и не знаем как надо. Ну а мы потрепем, может родим такое что вуликие гуру будут опыт перенимать. Код: plaintext 1. 2. 3. Уж не так ли он выглядит Код: plaintext 1. 2. 3. 4. 5. 6. 1) Начнем с просто Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3) А вот теперь предствавим что руки у меня кривые и сунул я в SAFE_DELETE что-то совсеи не то Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. А теперь объясни мне зачем весь это геморрой, если есть легкие классы оберток, которые все это закрывают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 11:30 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
blindedДолжен разочаровать, в вашем понимании new ненормален. Он позволяет себе при нехватке памяти генерировать bad_alloc. Так что присоединяйтесь Обьясните, пожлауйста, каким образом auto_ptr может помочь при нехватке памяти. blindedА теперь объясни мне зачем весь это геморрой, если есть легкие классы оберток, которые все это закрывают? Вот в таких случаях и полезен finally. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 14:01 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
>Обьясните, пожлауйста, каким образом auto_ptr может помочь при нехватке памяти. При любом исключении, а не только при нехватке памяти гарантируется, что при раскрутке стека для всех автоматических объектов будут вызваны деструкторы. Следовательно, на каком бы вызове new не вылетел bad_alloc, гарантируется, что динамические ресурсы (не только память, но хендлы окон, хэндлы открытых файлов, хэндлы мьютексов) находившиеся под управление автоматических объетов (я не имею ввиду только std::auto_ptr, а любые другие scope guard), будут корректно возвращены системе. Если для вас и это не является весомым аргументов, то, извините, здесь вас "исправит только могила" или своиже "грабли" :). А ваша уверенность в том, что вы можете изолировать все исключения на самом нижнем уровне системы говорит лишь о том, что вы используете уже сложившийся стиль и что-либо менять для вас является не подъемной задачей - это я могу принять, но нельзя же этот подход насаждать как догму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 14:17 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Сорри, я ErV принял за Aklin. Я обращался к Aklin-у. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 14:20 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир- если вас интересует случай new[], то тут используются std::vector, boost::shared_array (или еще чего), но не auto_ptrА что действительно нельзя? Вот я проверил: Код: plaintext 1. 2. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 14:57 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
ErV blindedДолжен разочаровать, в вашем понимании new ненормален. Он позволяет себе при нехватке памяти генерировать bad_alloc. Так что присоединяйтесь Обьясните, пожлауйста, каким образом auto_ptr может помочь при нехватке памяти. blindedА теперь объясни мне зачем весь это геморрой, если есть легкие классы оберток, которые все это закрывают? Вот в таких случаях и полезен finally. auto_ptr не поможет при нехватке, зато он освободит память и никакой finally не требуется еще раз Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 15:00 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Алексей К Голенков Владимир- если вас интересует случай new[], то тут используются std::vector, boost::shared_array (или еще чего), но не auto_ptrА что действительно нельзя? Вот я проверил: Код: plaintext 1. 2. Код: plaintext 1. А деструкторы все вызываются? То-то же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 15:03 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Стандарт явно говорит о том, что память выделенная с помощью new, new[] должна быть удалена с помощью delete, delete[] соответственно. То что на вашей платформе память, выделенная с помощью new[], может быть удалена с помощью delete, ни о чем не говорит - то есть, вам просто повезло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 15:12 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
blindedА деструкторы все вызываются? То-то жеТ. е. в случае с Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 15:13 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковСтандарт явно говорит о том, что память выделенная с помощью new, new[] должна быть удалена с помощью delete, delete[] соответственно. То что на вашей платформе память, выделенная с помощью new[], может быть удалена с помощью delete, ни о чем не говорит - то есть, вам просто повезло. Понял, отстал... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 15:15 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
буду отвечать по некоторым поуктом, поскольку остальные либо копируются либо я уже отвечал. Код: plaintext 1. 2. как уже говорил, для этотго есть менеджеры. :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. никто вам не запрещает переписать SAFE_DELETE :) Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. авторА теперь объясни мне зачем весь это геморрой, если есть легкие классы оберток, которые все это закрывают? 1) у вас в руках мощнейшее средство разработки. а вы не знаете, что с ним делать. 2) вы сами же обрезаете много полезных возможностей этим. 3) если закрыть все преимущества си, получется vb. 4) определитесь: оберток (т.е. интерфейсов) или закрывают (т.е. затычек) ??? аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 16:26 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковПри любом исключении, а не только при нехватке памяти гарантируется, что при раскрутке стека для всех автоматических объектов будут вызваны деструкторы. Следовательно, на каком бы вызове new не вылетел bad_alloc, гарантируется, что динамические ресурсы (не только память, но хендлы окон, хэндлы открытых файлов, хэндлы мьютексов) находившиеся под управление автоматических объетов (я не имею ввиду только std::auto_ptr, а любые другие scope guard), будут корректно возвращены системе. Если для вас и это не является весомым аргументов, то, извините, здесь вас "исправит только могила" или своиже "грабли" :). А ваша уверенность в том, что вы можете изолировать все исключения на самом нижнем уровне системы говорит лишь о том, что вы используете уже сложившийся стиль и что-либо менять для вас является не подъемной задачей - это я могу принять, но нельзя же этот подход насаждать как догму. 1) возвращение системе явно громозкое занатие. а если мне не надо их возвращять? программа начинает разваливаться при первом же исключении "нехватка памяти" судя по вашим словам. 2) я не вижу аргумента. точнее вижу что а) громозкость б) вы ставите затычки на язык в) перестаете контролироовать программу. 3) у меня нет такого убеждения, хотя говорилось, что это отлючается. у меня принцип "использовать исключения только в исклюительных случаях". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 16:32 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Aklin Вы так ничего не ответили на счет исключений - как будет выглядеть ваш код, который должен быть безопастным по отношению к исключениям с SAFE_DELETE - вы что же предлагаете в каждой функции оперирующей new использовать try/catch/finally. А зачем эти сложности, если все достается почти даром, если поместить голый указатель под управление автоматического объекта - здесь фактически нет оверхеда, поскольку тотже auto_ptr легковесен и легко встаивается. Сравните: Код: 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. 27. 28. И вы утвержаете, что boo2() это вершина ради которой надо было создавать С++? Я очень глубоко в этом сомневаюсь. Код boo1 выразительней, он лишен шелухи, которую приходится писать придерживаясь вашего подхода в любой функции оперирующей динамическими ресурсами только ради того, чтобы сделать код безопасным по отношению к исключениям. Нечитаемость - это слишком большая цена в промышленном программировании. Вы утверждаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 16:46 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
blinded auto_ptr не поможет при нехватке, зато он освободит память и никакой finally не требуется еще раз Код: 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. А зачем здесь ВООБЩЕ нужно было динамическое выделение памяти? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Aklin Код: plaintext 1. 2. 3. Можно вопрос? А зачем вам вообще SAFE_DELETE? Если инициализировать переменную изначально нулем, то никакой SAFE_DELETE, так как в качестве аргемента в delete/delete[] можно передавать нулевой указатель и удалять его сколько угодно... Если у вас был std::bad_alloc во время new, то, значит, в переменной у вас 0xcccccccc - если это отладочный билд и это MSVC, или неизвестно что, если это что-то другое. Соответственно, SAFE_DELETE вам не поможет. Если же в переменной был нуль, то SAFE_DELETE будет пустой тратой времени, так как нулевой указатель можно удалять: MSVC_help Using delete on a pointer to an object not allocated with new gives unpredictable results. You can, however, use delete on a pointer with the value 0. This provision means that, when new returns 0 on failure, deleting the result of a failed new operation is harmless. See The new and delete Operators for more information. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 16:47 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
2 Aklin Бог вам судья. Аминь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 16:53 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
если короче, резюмирую то, что мне пытались объяснить про auto_ptr 1) это либо затычка либо интерфейс (сами они еще не поняли) 2) это громозко (в плане конечного кода) и плохо контролируется 3) это БАЛЬШОЙ универсальный менеджер (+неконтролируемый) 4) накладываются ограничения. аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 17:02 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Касательно auot_ptr - какой в нем смысл, если он даже подсчетом ссылок на указатель не занимается? Возникла мысль, что в случаях, когда требуется авто-униктожение обьектов, часто можно просто обойтись без динамического выделения памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 17:04 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков2 Aklin Бог вам судья. Аминь :) я вот что: даже заосмневался а может я неправ. и проверил: накаих исключений. ПРЕКРАСНО работающий new и SAFE_DELETE. прекрасно вызывающиеся деструкторы... и все в этом духе. Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 17:04 |
|
||
|
auto_ptr или new + delete
|
|||
|---|---|---|---|
|
#18+
ErV Можно вопрос? А зачем вам вообще SAFE_DELETE? new так же как и элементарный calloc (malloc) возвращяют 0 при отсутствии памяти. если вы НЕ использовали указатель (даже не занулили), то это ошибка ВАШЕГО кода, которая и приводит к утечкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2007, 17:10 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34396841&tid=2029240]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 478ms |

| 0 / 0 |
