Что это за дополнительный параметр, переданный в виртуальный деструктор?

У меня есть этот код:

class Class {
public:
    virtual ~Class() {}
};

int main()
{
    Class* object = new Class();
    delete object;
}

, который я компилирую с Visual C ++ 10 и получаю эту разборку для оператора удаления объекта :

delete object;
test        eax,eax  
je          wmain+23h (401041h)  
mov         edx,dword ptr [eax]  
push        1  
mov         ecx,eax  
call        dword ptr [edx]

и этого для фактического деструктора:

Class::`scalar deleting destructor':
test        byte ptr [esp+4],1  
push        esi  
mov         esi,ecx  
mov         dword ptr [esi],offset Class::`vftable' (402100h)  
je          Class::`scalar deleting destructor'+18h (401018h)  
push        esi  
call        dword ptr [__imp_operator delete (4020A8h)]  
pop         ecx  
mov         eax,esi  
pop         esi  
ret         4

Что это push 1 выполняется на месте вызова, и почему test в точке входа деструктора проверяет это значение и условно обходит вызов оператора delete () ?

]
14
задан j0k 1 July 2013 в 14:11
поделиться