Visual C++ Compiler generates the following functions.
Decorated Name |
Undecorated Name |
Meaning |
?0 |
| constructor |
?1 |
| destructor |
?2 |
operator new |
|
?3 |
operator delete |
|
?4 |
operator = |
|
?5 |
operator >> |
|
?6 |
operator << |
|
?7 |
operator ! |
|
?8 |
operator == |
|
?9 |
operator != |
|
?A |
operator [] |
|
?B |
operator type |
|
?C |
operator -> |
|
?D |
operator * |
|
?E |
operator ++ |
|
?F |
operator -- |
|
?G |
operator - |
|
?H |
operator + |
|
?I |
operator & |
|
?J |
operator ->* |
|
?K |
operator / |
|
?L |
operator % |
|
?M |
operator < |
|
?N |
operator <= |
|
?O |
operator > |
|
?P |
operator >= |
|
?Q |
operator , |
|
?R |
operator () |
|
?S |
operator ~ |
|
?T |
operator ^ |
|
?U |
operator | |
|
?V |
operator && |
|
?W |
operator || |
|
?X |
operator *= |
|
?Y |
operator += |
|
?Z |
operator -= |
|
?_0 |
operator /= |
|
?_1 |
operator %= |
|
?_2 |
operator >>= |
|
?_3 |
operator <<= |
|
?_4 |
operator &= |
|
?_5 |
operator |= |
|
?_6 |
operator ^= |
|
?_7 |
$vftable |
compiler-generated “vftable” |
?_8 |
$vbtable |
compiler-generated “vbtable” |
?_9 |
| “vcall” |
?_A |
| “typeof” |
?_B |
| compiler-generated “local static guard” |
?_C |
| compiler-generated string literal |
?_D |
__vbaseDtor |
compiler-generated “vbase destructor” |
?_E |
__vecDelDtor |
compiler-generated “vector deleting destructor” |
?_F |
__dflt_ctor_closure |
compiler-generated “default constructor closure” |
?_G |
__delDtor |
compiler-generated “scalar deleting destructor” |
?_H |
__vec_ctor |
compiler-generated “vector constructor iterator” |
?_I |
__vec_dtor |
compiler-generated “vector destructor iterator” |
?_J |
__vec_ctor_vb |
compiler-generated “vector vbase constructor iterator” |
?_K |
$vdispmap |
compiler-generated “virtual displacement map” |
?_L |
__ehvec_ctor |
compiler-generated “eh vector constructor iterator” |
?_M |
__ehvec_dtor |
compiler-generated “eh vector destructor iterator” |
?_N |
__ehvec_ctor_vb |
compiler-generated “eh vector vbase constructor iterator” |
?_O |
__copy_ctor_closure |
compiler-generated “copy constructor closure” |
?_P |
| “udt returning” |
?_Q |
| “EH” |
?_R |
| “RTTI” |
?_S |
$locvftable |
compiler-generated “local vftable” |
?_T |
__local_vftable_ctor_closure |
compiler-generated “local vftable constructor closure” |
?_U |
operator new [] |
|
?_V |
operator delete [] |
|
?_W |
| “omni callsig” |
?_X |
__placement_delete_closure |
compiler-generated “placement delete closure” |
?_Y |
__placement_arrayDelete_closure |
compiler-generated “placement delete [] closure” |
?__A |
__man_vec_ctor |
compiler-generated “managed vector constructoro iterator” |
?__B |
__man_vec_dtor |
compiler-generated “managed vector destructor iterator” |
?__C |
__ehvec_copy_ctor |
compiler-generated “eh vector copy constructor iterator” |
?__D |
__ehvec_copy_ctor_vb |
compiler-generated “eh vector vbase copy constructor iterator” |
It's a function the compiler generates to implement the delete operator. It calls the object's
destructor, then frees the object's memory. If you new and deletearrays of objects, you will see the "vector deleting destructor"instead.
The scalar deleting destructor takes a flag parameter on the stackthat tells it whether or not to free the memory. I seem to recallreading about a bug in some versions of VC++ where, if you usedplacement new to create an object, then explicitly invoked itsdestructor, it would call the scalar deleting destructor, but withoutpushing the flag parameter. This would both mess up the stack, andpseudo-randomly try to free the object's memory.
http://groups.google.com/group/microsoft.public.vc.language/browse_frm/thread/3777c5e8fb844cab?hl=en&lr=&ie=UTF-8&oe=utf-8&rnum=3&prev=/groups%3Fq%3Dscalar%2Bdeleting%2Bdestructor%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3Dutf-8%26selm%3D3343E2DE.7553%40platinum.com%26rnum%3D3
more explanation is at http://www.byteclub.net/blog/zooba/?cat=3