| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > std::auto_ptr<char> и массив char |
| Автор: Alca 13.1.2009, 13:33 | ||||||||
| С++Builder 2009 Можно ли применять автопоинтер к массиву?
Дестуктор класса автопоинтер (вызывается при выходе из блока):
Не будет ли утечки памяти, т.к. применяеться оператор
вместо
P.S. По ходу там дальше идет очистка памяти. Проверил, сделал цикл на 1 000 000 иттераций - память не увеличивалась. Вопрос решен. |
| Автор: Vyacheslav 14.1.2009, 13:33 |
| И как память проверяли? CodeGuard? Вообще так код писать нельзя. Неужели трудно свой строгий указатель написать специально для массивов. |
| Автор: Alca 14.1.2009, 13:44 | ||
В диспетчере задач |
| Автор: Rififi 14.1.2009, 14:50 |
| Alca, Не будет ли утечки памяти будет не утечка памяти а UB |
| Автор: Alca 14.1.2009, 16:33 | ||
Это че за шняга? |
| Автор: Lazin 14.1.2009, 16:40 |
| undefined behavior, вместо auto_ptr лучше использовать boost::scoped_array Добавлено через 1 минуту и 4 секунды WTF is строгий указатель? Добавлено через 1 минуту и 58 секунд и зачем его писать если есть boost::scoped_array и boost::shared_array? |
| Автор: TiKKi 14.1.2009, 16:58 |
| А зачем вообще так делать? std::vector, по-моему, логичней использовать. |
| Автор: Alca 14.1.2009, 16:59 | ||||
| Вообще-то я нашел этот кусок кода в хелпе от C++Builder 2009. Добавлено @ 17:01
Ну я делал 1 000 000 иттераций и что-то не было никакого undefined behavior - объём памяти осталася таким же. |
| Автор: Alca 14.1.2009, 17:15 |
| Насчет std::vector я согласен, что лучше. Lazin, разъясни где оно (UB) было? |
| Автор: Lazin 14.1.2009, 17:21 |
во время удаления массива оператором delete вместо delete [], UB это когда результат работы кода не определен, он может работать так как предполагается, как в случае с delete, а может не работать так как предполагается, а может на одном компиляторе работать так, а на другом эдак, если у тебя в коде есть UB, то твоя программа может начать себя вести по другому после выхода новой версии твоего компилятора =) |
| Автор: Alca 14.1.2009, 17:36 |
| С этим яно. Спасибо. |
| Автор: Vyacheslav 14.1.2009, 19:47 | ||
Проcто имеет место быть у некоторых авторов уточняющая терминология, в которой под strong pointer подразумевается pointer, который подчиняется правилу : в любой момент времени только один строгий указатель может владеть памятью, на которую он указывает.
А зачем тащить boost, если от него нужно всего написать небольшой простейший класс? STL - это обязательная составляющая С++, boost пока левая библиотека. Например, некоторые заказчики весьма неодобрительно смотрят на применение левых библиотек. |