tom@tnosoes.UUCP (Tom Vijlbrief) (08/02/89)
The following program:
============================
#include <stdio.h>
class a {
public:
a() {}
virtual ~a() { printf("~a\n"); IsA(); }
virtual void IsA() { printf("I am a 'a'\n"); }
};
class b: public a {
public:
b() {}
virtual ~b() { printf("~b\n"); IsA(); }
virtual void IsA() { printf("I am a 'b'\n"); }
};
main()
{
b *p= new b;
delete p;
}
============================
compiled with g++1.35 prints:
~b
I am a 'b'
~a
I am a 'a'
========================
G++ replaces the vtbl pointer of the 'b' object with the vtbl pointer
of an 'a' object before calling ~a. I think that this is the correct
behaviour, otherwise ~a could call virtual methods from 'b' which
is already destructed!
My question is: Does cfront 1.2 behave the same, or does it leave
the vtbl pointer unchanged when calling ~a ?
Could someone with access to cfront test this ?
Thanks !
Tom
===============================================================================
Tom Vijlbrief
TNO Institute for Perception
P.O. Box 23 Phone: +31 34 63 562 11
3769 ZG Soesterberg E-mail: tnosoes!tom@mcvax.cwi.nl
The Netherlands or: uunet!mcvax!tnosoes!tom
===============================================================================