Quantcast
Channel: 隔叶黄莺 Unmi Blog » C++/VB
Viewing all articles
Browse latest Browse all 20

C++ 多重继承和虚继承的内存布局

$
0
0
这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006) 敬告: 本文是介绍C++的技术文章,假定读者对于C++有比较深入的认识,同时也需要一些汇编知识。 本文我们将阐释GCC编译器针对多重继承和虚拟继承下的对象内存布局。尽管在理想的使用环境中,一个C++程序员并不需要了解这些编译器内部实现细节,实际上,编译器针对多重继承(特别是虚拟继承)的各种实现细节对于我们编写C++代码都或多或少产生一些影响(比如downcasting pointer、pointers to pointers 以及虚基类构造函数的调用顺序)。如果你能明白多重继承是如何实现的,那么你自己就能够预见到这些影响,进而能够在你的代码中很好地应对它们。再者,如果你十分在意的代码的运行效率,正确地理解虚继承也是很有帮助的。最后嘛,这个hack的过程是很有趣的哦:) 多重继承 首先我们先来考虑一个很简单(non-virtual)的多重继承。看看下面这个C++类层次结构。 1 class Top 2 { 3 public: 4     int a; 5 }; 6 7 class Left : public Top 8 { 9 public: 10     int b; 11 }; 12 13 class Right : public Top 14 { 15 public: 16     int […]

Viewing all articles
Browse latest Browse all 20

Latest Images

Trending Articles





Latest Images