jjc@UUNET.UU.NET (James Clark) (04/28/89)
g++ can fail to call the appropriate virtual destructor: Script started on Thu Apr 27 20:13:54 1989 jclark% cat delete.c #include <stdio.h> struct A { virtual ~A() { fputs("~A\n", stderr); } }; struct B : A { }; struct C : B { ~C() { fputs("~C\n", stderr); } }; main() { B *p = new C; delete p; } jclark% g++ -g -v delete.c g++ version 1.34.1 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ delete.c /tmp/cca04129.cpp GNU CPP version 1.34 /usr/local/lib/gcc-c++ /tmp/cca04129.cpp -quiet -dumpbase delete.c -g -version -o /tmp/cca04129.s GNU C++ version 1.34.1 (sparc) compiled by GNU C version 1.34. as /tmp/cca04129.s -o delete.o /usr/local/lib/gcc-ld++ -C -e start -dc -dp -Bstatic /usr/local/lib/crt0+.o delete.o -lg++ /usr/local/lib/gcc-gnulib -lg -lc jclark% a.out ~A jclark% exit jclark% script done on Thu Apr 27 20:14:35 1989 If p is declared as an A*, ~C() gets called as it should. James Clark jjc@jclark.uucp