var_4
- это внутренняя переменная (я назову ее '_state
'), которая отслеживает состояние созданных объектов для раскручивания в случае возникновения исключения. То, что вы видите, является общим шаблоном, созданным VC ++ при работе с новыми объектами. Э.Г.
A* pA1 = new A();
преобразуется во что-то вроде этого:
_state = -1;
...
A *temp_pA1 = operator new(sizeof(A));
_state = 0;
if ( temp_pA1 != NULL )
{
pA1 = A::A(temp_pA1);
}
else
{
pA1 = NULL;
}
_state = -1;
...
[unwind funclet for state == 0]
{
A::~A(temp_pA1);
}
Как видите, ему присваивается какое-то значение (например, 0) после того, как блок памяти для объекта является новым, но объект еще не создан. Таким образом, если в конструкторе происходит исключение, обработчик исключения автоматически освободит выделенную память. После построения он установлен в -1, что примерно соответствует «автоматическому выполнению, теперь все управление памятью находится в руках программиста».
См. здесь для получения более подробной информации («Реализация модели исключений C ++» и «Пример программы с исключениями C ++»).