Geoff Chappell - Software Analyst
The so-called “vector destructor iterator” is known internally by the identifier __vec_dtor (at global scope), with the following compiler-generated code:
inline void __stdcall __vec_dtor ( void *__t, unsigned __s, int __n, void (__thiscall *__f) (void *)) { __t = (char *) __t + __s * __n; while (-- __n >= 0) { __t = (char *) __t - __s; (*__f) (__t); } }
Given __n objects each of size __s in an array at address __t, and a destructor at address __f, the iterator calls the destructor once for each object in the array, in reverse order.
The following fragment induces the compiler to generate a vector constructor iterator:
struct Test { ~Test (void); }; void test (Test *t) { delete [] t; }