Под раскруткой имеется ввиду последовательное разрушение объектов (unwind), например:
Код:
class MyForm : public Form
{
Label label1;
Button button1;
public:
MyForm();
~MyForm();
void do_something_bad();
};
void MyForm::do_something_bad()
{
vector<int> vector_of_10_ints(10);
// ...
// ну ошибся нечаянно
vector_of_10_ints.at(5) = vector_of_10_ints.at(15);
}
void do_something()
{
MyForm my_form;
my_form.do_something_bad();
}
порядок раскрутки:
раскручивается do_something_bad
vector<int>::~vector<int>();
раскручивается do_something
MyForm::~MyForm();
Button::~Button();
Label::~Label();
Form::~Form();
т.к. исключение до сих пор не обработано,
дальше раскручивается функция, которая
вызвала do_something, и т.д.
насчёт логики - да, хочу этим найти пологичнее...