它回到了编译器对对象生命周期的定义。如,何时真正取消分配内存。我认为在析构函数完成之前不可能,因为析构函数可以访问对象的数据。因此,我希望对析构函数的递归调用能够工作。
但是......肯定有很多方法可以实现析构函数和释放内存。即使它在我今天使用的编译器上按我想要的那样工作,我也会非常谨慎地依赖这种行为。有很多事情文档说它不起作用或者结果是不可预测的,如果你了解内部真正发生的事情,实际上工作得很好。但是除非你真的必须,否则依赖它们是不好的做法,因为如果规范说这不起作用,那么即使它确实起作用,你也不能保证它会在下一个版本中继续工作编译器。
也就是说,如果你真的想递归调用你的析构函数,这不仅仅是一个假设的问题,为什么不直接将析构函数的整个主体撕成另一个函数,让析构函数调用它,然后让它递归调用自己呢?那应该是安全的。