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

标签 c++ oop

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/

相关文章:

c++ - 简单的 C++ 程序超出其数组边界并崩溃

c++ - 在 mingw 中编译 SDL 1.3 时,SDL.dll 位于何处

c++ - Arduino 上的 C/C++ 字符串 .replace() 函数不起作用

perl - 在 Perl 中,子类为基类中的方法设置别名的正确方法是什么?

ruby 抽象

java - 基于不同服务构建请求的最佳方式/模式

c++ - 如何在 QLatin1String 中搜索子字符串?

c++ - "Attribute is protected within this context"具有继承和 .h 和 .cpp 文件

python - 在python中覆盖@classmethods的__str__方法

python - 在Python中使用大型数据集进行OOP的好方法