[vox-tech] C++ virtual function question

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Mon Dec 29 01:17:36 PST 2008


Hai Yi wrote:
> I am not sure this is a right place to ask a C++ question, but I
> noticed some people posted C questions before.
> 
> This is a code snippet from the book "C++ FAQ",
> 
> class Base{
> public:
> virtual ~Base() throw();
> };
> 
> class Derived: public Base{
> };
> 
> int main(){}

Give the body of main some meat... e.g.:

int main()
{
  Derived *dptr = new Derived;
  Base *bptr = dptr;
  delete bptr;
}

> according to the author, it should have a link problem, because,
> direct quote :"The reason is that the only virtual function in class
> Derived is inline, so the compiler puts a static copy of
> Derived::~Derived() into the current source file. Since this static
> copy of Derived::~Derived() invokes Base::~Base() the linker will need
> a definition of Base::~Base()"

I don't think the described implementation is the only way the compiler
could handle this, since inlining is optional on the part of the compiler.

> However, when I run this program, it worked fine. Is it my
> misunderstanding or my system gave this code a pass? (the author say
> it will fail on many systems...)

The compiler never generated any code to instantiate the troublesome 
objects, so the problem never appeared.

> 
> Thanks for any ideas!

Be sparing in your use of inline functions... they should be VERY simple
or you can get serious object code bloat.

-- 
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                       Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
---------------------------------------------------------------------------


More information about the vox-tech mailing list