C++空类的大小

C++的空类是指这个类不带任何数据,即类中没有非静态(non-static)数据成员变量,没有虚函数(virtual function),也没有虚基类(virtual base class)。

直观地看,空类对象不使用任何空间,因为没有任何隶属对象的数据需要存储。然而,C++标准规定,凡是一个独立的(非附属)对象都必须具有非零大小。换句话说,

    C++空类的大小不为0

为了验证这个结论,可以先来看测试程序的输出。

#include

using namespace std;                                                                                     

class NoMemers {

};

int main() {

  NoMemers n;

  cout << "the size of an object of empty class is:" << sizeof(n) << endl;

}

输出:

the size of an object of empty class is:1

C++标准指出,不允许一个对象(当然包括类对象)的大小为0,不同的对象不能具有相同的地址。这是由于:

    new需要分配不同的内存地址,不能分配内存大小为0的空间

    避免除以 sizeof(T)时得到除以0错误

故使用一个字节来区分空类。

值得注意的是,这并不代表一个空的基类也需要加一个字节到子类中去。这种情况下,空类并不是独立的,它附属于子类。

子类继承空类后,子类如果有自己的数据成员,而空基类的一个字节并不会加到子类中去。


原文:https://blog.csdn.net/lihao21/article/details/4797360

你可能感兴趣的:(C++空类的大小)