这个问题迷惑着我,我在CSDN上发帖子,得到了很好的解决。这是我第一次在CSDN上发帖子,CSDN果然是N多大牛.
先看代码:
问题是为什么执行delete这条语句会导致虚构函数无限递归?
感谢网友Arcticanimal,他给出了明确的两点解释:
1). delete 操作符会被编译器展开为至少两个子过程
1. 调用所传入类型的析构函数(如果是虚析构函数,之后还会去调用子类的析构函数)
2. 调用内存销毁函数,释放所传入指针指向的内存
对非动态分配的对象调用delete,第一个过程是不会有问题的,但是第二个过程就会让你的程序挂掉
楼主的代码在析构函数中调用delete,会在第一个子过程中形成无限递归,不会执行到第二个子过程。所以楼主的代码会正常的无线递归。
2). 伪代码清晰的解释了导致递归的原因