Jest sobie taki oto kod: void * operator new(size_t size) { return malloc(size); }
void operator delete(void * ptr) { free(ptr); }
class One { char * txt; public: One() {txt=NULL;}; virtual char *GetName() {return "One";}; char *GetObjName() {return GetName();}; virtual ~One(); };
class Two : public One { char *txt1; public: Two() {txt1=NULL;}; virtual char *GetName() {return "Two";}; ~Two(); };
One::~One() { if(txt) free(txt); }
Two::~Two() { if(txt1) free(txt1); }
int main(void) {
volatile char *ret;
One *o1=new One(); Two *o2=new Two();
ret=o1->GetObjName(); ret=o2->GetObjName();
delete o1; delete o2; }
Wszystko jest ok, konstruktory sa wywolywane we wlasciwej kolejnosci, ret prawidlowo zawiera zwracane nazwy obiektow. Problem zaczyna sie w momencie wykonania instrukcji delete o1 i delete o2. Okazuje sie, ze po delete o1 nie jest wywolywany destruktor obiektu One, a po delete o2 jest wywolywany i owszem destruktor obiektu One, ale juz nie jest wywolywany destruktor obiektu Two. Czyli program sie zachowuje tak jakby wywolywany byl destruktor z obiektu "o jeden wczesniejszego" w dziedziczeniu. Czy ktos moglby to sprawdzic jeszcze u siebie? Moze to tylko blad debuggera z AVR Studio? Gdzie mozna zglaszac bledy kompilatora AVR-gcc/g++? Bo na stronie WinAVR widze tylko mozliwosc zglaszania bledow zwiazanych z instalacja w Windowsie.