3

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

那么,当对象的大小如此之小时,如何将默认构造函数、析构函数、复制构造函数等合并到对象中呢?

4

2 回答 2

4

那么,当对象的大小如此之小时,如何将默认构造函数、析构函数、复制构造函数等合并到对象中呢?

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

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

obj.foo();

由编译器在内部转换为以下表达式:

foo(&obj);

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

于 2013-05-26T17:32:14.510 回答
1

在任何实际的 C++ 实现中,非虚拟成员函数(包括 ctor 等)都不构成对象的一部分。所以它们不会影响大小。*


* 虚拟成员函数通常使用vptr实现,这确实增加了每个对象的大小。

于 2013-05-26T17:31:49.877 回答