l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
October 7: Social gathering
Next Installfest:
TBD
Latest News:
Aug. 18: Discounts to "Velocity" in NY; come to tonight's "Photography" talk
Page last updated:
2008 Dec 29 11:21

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] C++ virtual function question
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] C++ virtual function question



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@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
---------------------------------------------------------------------------
_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Appahost Applications
For a significant contribution towards our projector, and a generous donation to allow us to continue meeting at the Davis Library.