c++ - 虚拟机制在虚拟析构函数的情况下如何工作

标签 c++ virtual-destructor

How do I get the member function pointer of a destructor?

这里有人回答说我们无法获取析构函数的函数指针 那么虚拟机制如何在下面的代码中工作。虚拟构造函数是否保存在虚拟表中??如果不是那么虚拟机制在虚拟析构函数的情况下如何工作?

#include<stdio.h>
class Base
{
    public:
    Base()
    {
          printf("C-Base\n");
    }

    virtual ~Base()
    {
           printf("Base\n");
    }
 };

 class Derived:public Base
 {
     public:
     Derived()
    {
         printf("C-DErived\n");
     }
     ~Derived()
     {
         printf("DErived\n");
     }
 };

int main()
{

     Base *b=new Derived();
     delete b;
 }

在此代码中,如果我们在基类析构函数中不使用虚拟,则不会调用派生类的析构函数。

最佳答案

当有人说您无法获得指向析构函数的指针时,这意味着没有源代码级别的语法。但在幕后,析构函数仍然是一个普通函数,实际上通常是通过存储在虚拟表中的指针访问的。

换句话说,就是,无法获得这样的指针。编译器本身获取它没有问题。 Quod licet Iovi non licet bovi

关于c++ - 虚拟机制在虚拟析构函数的情况下如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324726/

相关文章:

c++ - 字长频率,程序只打开cmd,什么都不做,C++

c++ - 在 C++ 中表示 128 位数字

c# - 如何在C++项目中使用C#代码

c++ - 每个类都应该有一个虚拟析构函数吗?

c++ - 如何将 std::string_view 转换为 QStringView

c++ - 使用Qt作为纯终端应用的网络爬虫

c++ - 非虚拟析构函数c++的异常

c++类型转换以获得访问权限

c++ - "virtual"对 C++ 中的析构函数有何影响?

c++ - 多态放置的东西的析构函数