小编Ant*_*kov的帖子

cpp - vtable 指针在构造/销毁期间是否被更改

因此,当在ctor/dtor基类中使用派生类并调用成员函数(包括虚拟)时,无论this是否通过指针,都会调用相关类的函数。

怎么会?vtable在此过程中对象的指针是否以某种方式被更改?因为,据我所知,vtable除非使用多重继承,否则对象中通常只有一个指针。


我有以下代码来举例说明我的意思:

#include <stdio.h>


class B {
    public:
    B()
        { printf("B constructor!\n"); f(); g(); }
    virtual ~B()
        { printf("B destructor!\n");  f(); g(); }
    virtual void f() 
        { printf("f() in B!\n"); }
    void g() 
        { printf("g() in B!\n"); }
    void h() 
        { printf("h() in B!\n"); }
};

class D : public B {
    public:
    D()
        { printf("D constructor!\n"); f(); g(); }
    virtual ~D()
        { printf("D destructor!\n");  f(); g(); }
    virtual void f() …
Run Code Online (Sandbox Code Playgroud)

c++ vtable

3
推荐指数
1
解决办法
265
查看次数

标签 统计

c++ ×1

vtable ×1