home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!utcsri!skule.ecf!torn!spool.mu.edu!uwm.edu!linac!att!att!allegra!alice!bs
- From: bs@alice.att.com (Bjarne Stroustrup)
- Newsgroups: comp.std.c++
- Subject: Re: Must derived class reserve space for an empty base class?
- Message-ID: <24490@alice.att.com>
- Date: 27 Dec 92 14:39:07 GMT
- Article-I.D.: alice.24490
- References: <1992Dec16.202800.3398@microsoft.com> <5450@holden.lulea.trab.se> <1992Dec24.202339.26224@microsoft.com>
- Organization: AT&T Bell Laboratories, Murray Hill NJ
- Lines: 44
-
-
-
- jimad@microsoft.com (Jim Adcock @ Microsoft Corporation) writes
-
- > Below find an example that frequently catches programmers off guard.
- > Again, C++ pointers DO NOT model any notion of object identity. If you
- > want your objects to maintain a notion of object identity [A good
- > idea, IMHO] then you must explicitly GIVE your objects a notion of object
- > identity. C++ comes with no such notion built-in.
- >
- > #include <iostream.h>
- >
- > class A { char bsPadding; };
- > class B : public A {};
- > class C : public A {};
- > class D : public B, public C {};
- >
- > main()
- > {
- > D d;
- >
- > B* pb = &d;
- > C* pc = &d;
- > A* pa1 = pb;
- > A* pa2 = pc;
- >
- > if (pa1 == pa2)
- > cout << "pointers match\n";
- > else
- > cout << "pointers don't match -- even though of the same"
- > " type and 'to the same object'!\n";
- >
- > return 0;
- > };
-
- Huh? pa1 and pa2 does not point to the same object of type A. They point to
- different sub-objects the D each of type A.
-
- I conjecture that people who think that pa1 and pa2 should point to the
- same object aren't confused about `object identity' but about the distinction
- between virtual and ordinary base classes (and the reason for that is often
- that they haven't read a good C++ textbook, but thought they could deduce
- the meaning of the example from first principles or experience with some
- other language).
-