c ++空类大小和默认函数

时间:2013-05-26 17:26:15

标签: c++ oop

http://www.careercup.com/question?id=17225664提到空类对象的大小至少为1.

那么,当对象的大小如此之小时,如何将默认构造函数,析构函数,复制构造函数等包含在对象中?

2 个答案:

答案 0 :(得分:4)

  

那么,当对象的大小如此之小时,如何将默认构造函数,析构函数,复制构造函数等包含在对象中?

这些是成员函数,成员函数的代码不会增加对象的大小。那只是代码。它不会为您创建的每个对象实例化。将成员函数添加到类不会增加该类实例的大小。它是代码,而不是数据。

无论您创建的类的实例有多少,都会生成一次成员函数的代码,并且它通过访问传递给它的隐式this指针来作用于调用它的特定对象。它。简而言之,这个表达式:

obj.foo();

由编译器内部转换为此表达式:

foo(&obj);

在这方面唯一可能影响类实例大小的是你的对象是否至少有一个虚函数;如果是这种情况,每个对象都必须存储一个指向其 vtable 的附加指针,以启用多态分派。

答案 1 :(得分:1)

在任何实际的C ++实现中,非虚拟成员函数(包括ctors等)不构成对象的一部分。因此它们不会影响尺寸。 *

<小时/> <子> * 虚拟成员函数通常使用vptr实现,这会增加每个对象的大小。