|
|
1
8
C++标准保证C结构和C++类(或结构——相同的东西)的内存布局是相同的,前提是C++类/结构符合POD(“普通旧数据”)的标准。那么POD是什么意思呢? 如果满足以下条件,则类或结构为POD: 所有数据成员都是公共的,其本身是POD或基本类型(但不是引用或指向成员类型的指针),或此类类型的数组
因此,在您的情况下,内存布局是相同的。 |
|
|
2
7
可能吧。
自从
该标准只描述抽象机器的语义,因此没有
保证
类型的对象
(1)
(2)
|
|
|
3
2
这在形式上取决于编译器,但如果编译器声明非虚拟成员函数会更改类的布局,则可能会造成破坏。您需要这种稳定性来加强共享对象依赖于每个平台的兼容性。 |
|
4
1
是和否。。。
在您的特定情况下,不会。结构只不过是一个数据容器,函数驻留在其他地方。调用该函数时,指向该结构的指针作为附加的隐式第一个参数传递,该参数显示为
但是,如果您添加 事实上的 作用虽然C++标准没有强制要求它,但vtables是 事实上 标准,并且该类将作为第一个但不可见的成员接收指向vtable的指针。您可以通过在添加虚拟函数之前和之后打印出对象的大小来尝试这一点。 另一方面,如果 是 虚拟已经因为继承了另一个已经有虚拟函数的类,所以内存布局不会再改变,因为已经有一个指向包含的vtable的指针(尽管它将指向子类实例的不同位置)。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |