C++ 组合和继承的内存布局有什么不同吗? 结构A { INTA、b、c; int fa(){/*something*/} }; 结构B1:A { int a1、b1、c1; int ba(){/*something*/} }; 结构B2 { A A; int fa(){a.fa();} int a2、b2、c2; int ba(){/*something*/} }; void main() { B1; B2; //某物 }
C++ 组合和继承的内存布局有什么不同吗? 结构A { INTA、b、c; int fa(){/*something*/} }; 结构B1:A { int a1、b1、c1; int ba(){/*something*/} }; 结构B2 { A A; int fa(){a.fa();} int a2、b2、c2; int ba(){/*something*/} }; void main() { B1; B2; //某物 },c++,oop,c++11,inheritance,memory,C++,Oop,C++11,Inheritance,Memory,b1和b2在内存中的布局是否相同?另外,在类B2中,当我使用继承时,我是否基本上完成了编译器所做的一切?B1有一个到A的隐式转换,而B2没有。当然,它们的内存布局有所不同。但问题不是内存效率之类的,而是什么在语义上更合适。因此,在设计说明中不应考虑这一点。这很容易通过调试器或printf进行检查("%p、 ..它们可以具有相同的布局。但是如果它们具有相同的布局,则不允许您依赖它。这一问题的答案取决于您希望了解此信息的原因。您想知道编译器是否以类似的方式实现继承?或者您想知道B1和B2是否具有相同
b1
和b2
在内存中的布局是否相同?另外,在类B2
中,当我使用继承时,我是否基本上完成了编译器所做的一切?B1
有一个到A
的隐式转换,而B2
没有。当然,它们的内存布局有所不同。但问题不是内存效率之类的,而是什么在语义上更合适。因此,在设计说明中不应考虑这一点。这很容易通过调试器或printf进行检查("%p、 ..
它们可以具有相同的布局。但是如果它们具有相同的布局,则不允许您依赖它。这一问题的答案取决于您希望了解此信息的原因。您想知道编译器是否以类似的方式实现继承?或者您想知道B1
和B2
是否具有相同的布局相同的布局,因为它允许您将指向一个对象的指针视为指向另一个对象的指针?B1
具有到a
的隐式转换,而B2
没有。当然,这些对象的内存布局有所不同。但问题不是内存效率之类的,而是什么在语义上更合适。因此,您应该在设计说明中不考虑这一点。这很容易用调试器或printf检查("%p、 ..
它们可以具有相同的布局。但是如果它们具有相同的布局,则不允许您依赖它。这一问题的答案取决于您希望了解此信息的原因。您想知道编译器是否以类似的方式实现继承?或者您想知道B1
和B2
是否具有相同的布局相同的布局,因为它允许您将指向一个的指针视为指向另一个的指针?