http://www.careercup.com/question?id=17225664提到空类对象的大小至少为 1。
那么,当对象的大小如此之小时,如何将默认构造函数、析构函数、复制构造函数等合并到对象中?
最佳答案
So, How are default constructor, destructor, copy constructor etc incorporated in the object when it's size is so small?
那些是成员函数,成员函数的代码不会增加对象的大小。那只是代码。它不会为您创建的每个对象实例化。向类中添加成员函数不会增加该类实例的大小。它是代码,不是数据。
无论您创建该类的多少个实例,成员函数的代码都会生成一次,并且它通过访问隐式 this
指针作用于调用它的特定对象,该指针是被传递给它。简单来说,这个表达式:
obj.foo();
由编译器在内部转换成这个表达式:
foo(&obj);
在这方面,唯一可能影响类实例大小的是你的对象是否至少有一个虚函数;如果是这种情况,每个对象都必须存储一个指向其 vtable 的额外指针以启用多态分派(dispatch)。
关于C++ 空类大小和默认函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761833/