the*_*oon 1 c++ memory-management c++11
为什么虚拟析构函数会在内存管理中产生这些差异?
我有一节课:
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;
};
Run Code Online (Sandbox Code Playgroud)
如果我打电话给A a; member_offset(a);我打印:
&a =002EFD28
&a.mx=002EFD28
p=3079464 q=3079464
Run Code Online (Sandbox Code Playgroud)
如果我做了析构函数virtual,我会得到其他地址:
&a =002EFD28
&a.mx=002EFD2C
p=3079464 q=3079468
Run Code Online (Sandbox Code Playgroud)
为什么?虚拟析构函数对内存管理有何影响?