sizeof:
#include<iostream>
using namespace std;
class A {
private :
int value;
public:
A(int n) { value = n;}
A(A &other) { value = other.value; }
void printf() { cout << value << endl; }
};
class B {
};
class C {
public:
C() {};
~C() {};
};
class D {
public:
virtual void fun() {};
};
int main()
{
A a = 10;
A b = a;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
cout << sizeof(D) << endl;
b.printf();
return 0;
}
1、sizeof(空类类型)输出为1个字节;空类类型中没有任何成员变量和成员函数;声明实例的时候,它必须占用一定的空间,否则无法使用实例,使用多少内存由编译器决定,Visual studio中每一个空类的实例占用一字节的空间。
2、空类中增加了析构函数和构造函数,sizeof(类)的大小为1,析构函数和构造函数只需要知道函数的地址,函数地址与函数类型有关,与函数的实例无关
3、空类的析构函数标记为虚函数;C++编译器发现一个类型中有虚函数,该类型会生成虚函数表,并在该类型的每一个类型实例中添加一个指向虚函数表的指针;32位一个指针4字节,sizeof为4;64为机一个指针8字节,sizeof为8
4、C++不允许赋值构造函数传值参数,需要用常量引用