title: What's this extra parameter passed into virtual destructor?
body: <p>I have this code:</p>
  
  <pre><code>class Class {
  public:
      virtual ~Class() {}
  };
  
  int main()
  {
      Class* object = new Class();
      delete object;
  }
  </code></pre>
  
  <p>which I compile with Visual C++ 10 and get this disassembly for <code>delete object</code> statement:</p>
  
  <pre><code>delete object;
  test        eax,eax  
  je          wmain+23h (401041h)  
  mov         edx,dword ptr [eax]  
  push        1  
  mov         ecx,eax  
  call        dword ptr [edx]
  </code></pre>
  
  <p>and this for the actual destructor:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>What is that <code>push 1</code> doing at the call site and why is the <code>test</code> at the destructor entry point checking for that value and conditionally bypass call to <code>operator delete()</code>?</p>