Due to popular demand, I’ve updated the “C++ background: Static, reinterpret and C-Style casts” article. The update clarifies that the compiler may put the virtual function table (if it uses one) where it wants. The only guarantee by the C++ standard is that members inside a single declaration block (
private:) will not get reordered. I remember that the fact that C++ does not make any stronger guarantees will enable things like deriving a class from an object which is hosted on a different heap and still have some part on another heap – for example, having a class which is in part a .NET object and lives on the garbage collected heap and the other part is native and lives on the normal heap.
Update: Found it:
Others had often questioned the use-fulness of C++’s leaving that implementation door open for the future, but the mixed type design – where parts of the same logical object must be on different physical heaps – vindicates Bjarne’s design judgment.
from Herb Sutter’s C++/CLI Rationale, page 18.