《深度探索C++对象模型》P.233 L.-2:
一个由程序员定义的 destructor 被扩展的方式类似 constructor 被扩展的方式,但顺序相反:
1. 如果 object 内带一个 vptr,那么首先重设 (reset) 相关的 virtual table;
If the object contains a vptr, it is reset to the virtual table associated with the class.
2. destructor 的函数本身现在被执行,也就是说 vptr 会在程序员的码执行前被重设 (reset);
The body of the destructor is then executed; that is, the vptr is reset prior to evaluating the user-supplied code.
3. 如果 class 拥有 member class objects,而后者拥有 destructors,那么它们会以其声明顺序的相反顺序被调用;
If the class has member class objects with destructors, these are invoked in the reverse order of their declaration.
4. 如果有任何直接的(上一层)nonvirtual base classes 拥有 destructors,它们会以其声明顺序的相反顺序被调用;
If there are any immediate nonvirtual base classes with destructors, these are invoked in the reverse order of their d