Информация об изменениях

Сообщение 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>>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>>auto_ptr<...> + auto_ptr<...>->Release
C>>

C>> в конце функции в случае успешного завершения. Не?

A>Ну он у меня спрашивал, я делаю не так. Я просто по старинке кидаю и ловлю исключение.

ПлятЪ (C).
А как тогда в обработчике исключения, особенно если исключение кидается в вызываемой функции, а ловится в вызывающей функции освободить указатели на new-объекты, которые висели на стеке вызываемой функции?

А ну нафиг! (С)
Лучше как мантру повторять, кто память выделял, тот ее и освобождает. И по максимуму к этому стремится.
Ясень пень, есть особые случаи. Но особые случаи на то и особые, чтобы не возникать через раз на простом элементарном коде. Но для особых случаев и решения особые.

Мне показалось, что раз исключения есть — то здесь вам не Си.
Соответственно, шаблоны доступны. Ну вроть как тогда все просто: выделяем память под объекты через new, и сразу их хватаем в auto_ptr.
На успешном выходе из функции, все эти auto_ptr релизим. И всё работает как оно нам надо.

А вот если что не так, то выходим из функции досрочно, и все эти auto_ptr сами за собой подчистят все.
Мне кажется, что так надежнее.

Не надо ни о чем гадать: функция успешно отработала? Получите в вызывающей функции ваши эти Интернеты указатели, которые просили.
Что-то пошло не так: вызываемая функция сообщит об этом (ну как-то там вернет NULL-s/null_ptr-s, или как то иначе), но вызываемая функция сама за собой всё и подчистит в таком случае.

Тут ломаться-то вроде и нечему. И исключения те же, кидай сколько хошь.
Все, конечно, имхо...