本文主要是介绍一个诡异的C++内存泄露问题。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
delet被编译成了两个步骤:调相应析构函数,回收p指向的内存块
即使父类没声明虚析构函数,第二步还是生效的,所以你Derived的内存区是被正确回收的,但Derived的内存区域(std::string)并不是连续区间,可能是这样的东东(64byte+ptr)
delet的第二步回收的就只是这(64byte+ptr) 65个字节
string内部关联的那块就泄露了
然后delete的第一步,调用到正确析构函数的话,就是Derived的析构函数,这个函数里会调用std::string的析构函数,回收那部分“关联内存”
父类没声明虚析构函数,就少了调用string
这篇关于一个诡异的C++内存泄露问题。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!