Re: class member acces through pointer vs object
On Jul 18, 11:38 am, Rahul <rahulsha...@lucent.com> wrote:
While reading Inside the C++ object model I came through the following
paragraph
Point3d origin, *ptr = &origin;
A) origin.x = 0.0;
B) ptr->x = 0.0;
The book says "A & B statements performs equivalently if x is
a member of a struct, class, single inheritance hierarchy, or
multiple inheritance hierarchy" This is because compiler knows
the offset of the member at compile time.
With one exception: if x is a member of a virtual base class of
Point3d. (And even then, in the above code, the compiler knows
that ptr points to a Point3d, and not a class derived from a
Point3d.)
My doubt is, How can the compiler know the offset of x in
case of B for multiple inheritance.
It knows how it laid out the object.
suppose we have
class Base_1{public: int i;}
class Base_2{public: int x;}
class Derived: public Base_1, public Base_2: {public: int k;}
now the offset of x will be different in Base_2 and Derived,
and the ptr may refer to any kind of object at run time,
No. ptr may only refer to a Point3d at run time. That Point3d
may be the base class of a more derived class, but that doesn't
change anything. The compiler knows where both i and x are in a
Point3d, and can generate the necessary code.
so how can we know the offset at compile time.
I mean the access through pointer must be slower in the above
case of Multiple inheritance. Please correct me if I am wrong.
Access through the pointer may be slower, because on some
machines, access through a pointer is slower than direct access.
(Of course, on other machines, such as the Sparc's I usuallly
work on, it is faster.) But other than that, there's no
difference as long as virtual inheritance is not involved.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34