我对虚拟析构函数感到困惑。我知道我们是否使用基类指针创建派生类的实例,如下所示
Base *p = new Derived;
但如果我们现在删除它
delete p;
为什么不能正确删除对象? p
指向的是什么?我知道使基类析构函数虚拟会正确地杀死对象,但这个东西在概念上是如何工作的?它与堆有关吗?作为声明的结果
Base *p = new Derived;
堆栈中存储的内容以及堆上的内容是什么?通过简单地删除(使用非虚拟基础析构函数)为什么它不调用派生的析构函数。我在概念上感到困惑。