关于sizeof有些不理解,求助

剑指offer中有
如果在该类型中添加一个构造函数和析构函数,再求sizeof,得到的结果是多少?
答案:还是1。调用构造函数和析构函数只需要知道函数的地址即可,而这些地址只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数而在实例内添加任何额外的信息。

注:不管添加的是构造函数还是析构函数还是其它任何类型的函数,都是这个结果。

调用构造函数和析构函数只需要知道函数的地址即可,而这些地址只与类型相关,而与类型的实例无关,这句话怎么理解?

举个例子,为什么这样定义的一个类sizeof ,大小是
class a
{
public:
a() {};
~a() {};
public:
int bb3() { };
int bb4()
{
int a = 0;
int b = 1;
int c = 10;
};
int abc;
};

文章的意思是,添加构造函数、析构函数不会改变sizeof对于一个类的大小。至于是不是1,那么要看原来这个类型大小是多少,还有用的什么编译器。
就你的程序而言,在我这里输出4
去掉
public:
a() {};
~a() {};
也是4

函数定义是不需要存在每个实例里的,因为所有class a的对象都会有你定义的函数,所以不需要为了每个实例重新存储一遍函数定义,相当于函数存储为全局的,而class的size只和class中回产生差别项占的内存有关,比如私有变量。
可以看一下我下面的程序

 #include <iostream>
#include <stdlib.h>

using namespace std;

class a{
    int abc;
public:
    a(){}
    ~a(){}
    int bb3(){}
    int bb4(){
        int a = 0;
        int b = 0;
        int c = 0;
    }
};

class b{
    int abc;
    int def;
public:
    b(){}
    ~b(){}
    int bb3(){}
    int bb4(){
        int a = 0;
        int b = 0;
        int c = 0;
    }
}; 

int main(){
    cout << sizeof(a) << endl;// 4 = sizeof(abc)               = sizeof(int)
    cout << sizeof(b) << endl;// 8 = sizeof(abc) + sizeof(def) = sizeof(int) * 2
}

两个类的差别在于私有变量不同,因此所占空间也不同

你把析构函数前面加个virtual,看看sizeof值又变成了多少