"Alec Flett" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> Actually, this is only true when we're talking about concrete classes -
> this is one of the great things about using interfaces (aka "pure
> virtual classes") - the way the functions pointers (i.e. vtable entries)
> are laid out in memory is defined by the interfaces that a class
> implements, independent of the construction of the object itself (i.e.
> member variables) - so you can change the object however you like as
> long as you are going through interfaces.

But inline functions don't have to use the interfaces, they can just mess
with the member variables of the object.

Component X

class foo {
private:
 int A;
 int B;
public:
  inline int getB() {return B}
}

Component Y

int function xx(foo * pFoo);
  return pFoo->getB();  //* inline code will just do something like mov ax,
[si]B
}

Component X and Y are compiled together.

Now we change Component X to remove member variable A and re-release it.

Component Y is compiled to expect B in the wrong place. This invisible
linkage doesn't require any exports.


Jon Smirl
[EMAIL PROTECTED]




Reply via email to