gpt4 book ai didi

c++ - 使用和不使用虚拟析构函数的内存管理

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:26:33 24 4
gpt4 key购买 nike

为什么虚拟析构函数在内存管理上造成这些差异?

我有一个类:

class A
{
public:
A() : m_x(0) { }
~A() {}
public:
static ptrdiff_t member_offset(const A &a)
{
const char *p = reinterpret_cast<const char*>(&a);
const char *q = reinterpret_cast<const char*>(&a.m_x);

std::cout << "\n&a =" << &a << "\n&a.mx=" << &a.m_x << "\np=" << (int)p << " q=" << (int)q << '\n';

return q - p;
}
private:
int m_x;
};

如果我调用 A a; member_offset(a); 我得到打印:

&a   =002EFD28
&a.mx=002EFD28
p=3079464 q=3079464

如果我将析构函数设为 virtual,我将获得其他地址:

&a   =002EFD28
&a.mx=002EFD2C
p=3079464 q=3079468

为什么?虚析构函数对内存管理有什么影响?

最佳答案

虚拟方法表指针被添加到类的每个实例 - 通常在对象的开头。它不一定是析构函数,任何第一个 virtual 方法都将决定生成一个虚方法表。

关于c++ - 使用和不使用虚拟析构函数的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com