[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