Сообщение Re[10]: А может перейти на C/C++ ? от 09.05.2023 6:50
Изменено 09.05.2023 16:58 Carc
Re[10]: А может перейти на C/C++ ?
Здравствуйте, alpha21264, Вы писали:
A>Здравствуйте, Carc, Вы писали:
УП>>>А если этих new больше одного, и между ними или в одном из них бросит? Ты всю эту логику прописываешь вручную?
C>>auto_ptr
C>>
C>> в конце функции в случае успешного завершения. Не?
A>Ну он у меня спрашивал, я делаю не так. Я просто по старинке кидаю и ловлю исключение.
ПлятЪ (C).
А как тогда в обработчике исключения, особенно если исключение кидается в вызываемой функции, а ловится в вызывающей функции освободить указатели на new-объекты, которые висели на стеке вызываемой функции?
А ну нафиг! (С)
Лучше как мантру повторять, кто память выделял, тот ее и освобождает. И по максимуму к этому стремится.
Ясень пень, есть особые случаи. Но особые случае на то и особые, чтобы не возникать через раз на простом элементарном коде. Но для особых случаев и решения особые.
Мне показалось, что раз исключения есть — то здесь вам не Си.
Соответственно, шаблоны доступны. Ну вроть как тогда все просто: выделяем память под объекты через new, и сразу их хватаем в auto_ptr.
На успешном выходе из функции, все эти auto_ptr релизим. И всё работает как оно нам надо.
А вот если что не так, то выходим из функции досрочно, и все эти auto_ptr сами за собой подчистят все.
Мне кажется, что так надежнее.
Не надо ни о чем гадать: функция успешно отработала? Получите в вызывающей функции ваши этиИнтернеты указатели, которые просили.
Что-то пошло не так: вызываемая функция сообщит об этом (ну как-то там вернет NULL-s/null_ptr-s, или как то иначе), но вызываемая функция сама за собой всё и подчистит в таком случае.
Тут ломаться-то вроде и нечему. И исключения те же, кидай сколько хошь.
Все, конечно, имхо...
A>Здравствуйте, Carc, Вы писали:
УП>>>А если этих new больше одного, и между ними или в одном из них бросит? Ты всю эту логику прописываешь вручную?
C>>auto_ptr
C>>
C>>auto_ptr<...> + auto_ptr<...>->Release
C>>C>> в конце функции в случае успешного завершения. Не?
A>Ну он у меня спрашивал, я делаю не так. Я просто по старинке кидаю и ловлю исключение.
ПлятЪ (C).
А как тогда в обработчике исключения, особенно если исключение кидается в вызываемой функции, а ловится в вызывающей функции освободить указатели на new-объекты, которые висели на стеке вызываемой функции?
А ну нафиг! (С)
Лучше как мантру повторять, кто память выделял, тот ее и освобождает. И по максимуму к этому стремится.
Ясень пень, есть особые случаи. Но особые случае на то и особые, чтобы не возникать через раз на простом элементарном коде. Но для особых случаев и решения особые.
Мне показалось, что раз исключения есть — то здесь вам не Си.
Соответственно, шаблоны доступны. Ну вроть как тогда все просто: выделяем память под объекты через new, и сразу их хватаем в auto_ptr.
На успешном выходе из функции, все эти auto_ptr релизим. И всё работает как оно нам надо.
А вот если что не так, то выходим из функции досрочно, и все эти auto_ptr сами за собой подчистят все.
Мне кажется, что так надежнее.
Не надо ни о чем гадать: функция успешно отработала? Получите в вызывающей функции ваши эти
Что-то пошло не так: вызываемая функция сообщит об этом (ну как-то там вернет NULL-s/null_ptr-s, или как то иначе), но вызываемая функция сама за собой всё и подчистит в таком случае.
Тут ломаться-то вроде и нечему. И исключения те же, кидай сколько хошь.
Все, конечно, имхо...
Re[10]: А может перейти на C/C++ ?
Здравствуйте, alpha21264, Вы писали:
A>Здравствуйте, Carc, Вы писали:
УП>>>А если этих new больше одного, и между ними или в одном из них бросит? Ты всю эту логику прописываешь вручную?
C>>auto_ptr
C>>
C>> в конце функции в случае успешного завершения. Не?
A>Ну он у меня спрашивал, я делаю не так. Я просто по старинке кидаю и ловлю исключение.
ПлятЪ (C).
А как тогда в обработчике исключения, особенно если исключение кидается в вызываемой функции, а ловится в вызывающей функции освободить указатели на new-объекты, которые висели на стеке вызываемой функции?
А ну нафиг! (С)
Лучше как мантру повторять, кто память выделял, тот ее и освобождает. И по максимуму к этому стремится.
Ясень пень, есть особые случаи. Но особые случаи на то и особые, чтобы не возникать через раз на простом элементарном коде. Но для особых случаев и решения особые.
Мне показалось, что раз исключения есть — то здесь вам не Си.
Соответственно, шаблоны доступны. Ну вроть как тогда все просто: выделяем память под объекты через new, и сразу их хватаем в auto_ptr.
На успешном выходе из функции, все эти auto_ptr релизим. И всё работает как оно нам надо.
А вот если что не так, то выходим из функции досрочно, и все эти auto_ptr сами за собой подчистят все.
Мне кажется, что так надежнее.
Не надо ни о чем гадать: функция успешно отработала? Получите в вызывающей функции ваши этиИнтернеты указатели, которые просили.
Что-то пошло не так: вызываемая функция сообщит об этом (ну как-то там вернет NULL-s/null_ptr-s, или как то иначе), но вызываемая функция сама за собой всё и подчистит в таком случае.
Тут ломаться-то вроде и нечему. И исключения те же, кидай сколько хошь.
Все, конечно, имхо...
A>Здравствуйте, Carc, Вы писали:
УП>>>А если этих new больше одного, и между ними или в одном из них бросит? Ты всю эту логику прописываешь вручную?
C>>auto_ptr
C>>
C>>auto_ptr<...> + auto_ptr<...>->Release
C>>C>> в конце функции в случае успешного завершения. Не?
A>Ну он у меня спрашивал, я делаю не так. Я просто по старинке кидаю и ловлю исключение.
ПлятЪ (C).
А как тогда в обработчике исключения, особенно если исключение кидается в вызываемой функции, а ловится в вызывающей функции освободить указатели на new-объекты, которые висели на стеке вызываемой функции?
А ну нафиг! (С)
Лучше как мантру повторять, кто память выделял, тот ее и освобождает. И по максимуму к этому стремится.
Ясень пень, есть особые случаи. Но особые случаи на то и особые, чтобы не возникать через раз на простом элементарном коде. Но для особых случаев и решения особые.
Мне показалось, что раз исключения есть — то здесь вам не Си.
Соответственно, шаблоны доступны. Ну вроть как тогда все просто: выделяем память под объекты через new, и сразу их хватаем в auto_ptr.
На успешном выходе из функции, все эти auto_ptr релизим. И всё работает как оно нам надо.
А вот если что не так, то выходим из функции досрочно, и все эти auto_ptr сами за собой подчистят все.
Мне кажется, что так надежнее.
Не надо ни о чем гадать: функция успешно отработала? Получите в вызывающей функции ваши эти
Что-то пошло не так: вызываемая функция сообщит об этом (ну как-то там вернет NULL-s/null_ptr-s, или как то иначе), но вызываемая функция сама за собой всё и подчистит в таком случае.
Тут ломаться-то вроде и нечему. И исключения те же, кидай сколько хошь.
Все, конечно, имхо...