Aktywne Wpisy

Pust3lnick +1
Cześć. Jako że od ponad 10 lat mam prawo jazdy B i zawsze chciałem spróbować swoich sił na motocyklu postanowiłem zakupić sobie 125 żeby spełnić wreszcie swoje małe marzenie. Jest tylko jeden problem - na żadnym motorze nigdy nie jeździłem, wiem tylko jak się tym jeździ w teorii z internetu, ale praktycznie nie mam ani minuty doświadczenia, a gdybym tą 125 zakupił, to miałbym ponad 40 km drogi powrotnej do pokonania nim






Skąd operator delete wie ile ma uwolnić pamięci?
class A {public:
virtual ~A();
int a;
}
class B: public A {
public:
int b;
}
-----
A* aPtr = new B;delete aPtr;
wirtualne konstruktory działają fajnie. Na początku zakładałem, ze delete rozmiar czerpie z przekazanego pointera. Ale powyższy przykład burzy tę teorię. Gdzieś musi być trzymany rozmiar, aby poprawnie kod zadziałał. Gdzie? vtables, czy może gdzieś przy kodzie destruktora?
Komentarz usunięty przez autora Wpisu
@msgreen: dokladnie tak jest, glowy nie dam, ale pierwsze 4 bajty to zdaje sie rozmiar obiektu
Komentarz usunięty przez autora Wpisu
oraz dla tablic:
http://stackoverflow.com/questions/2327848/how-does-the-delete-in-c-know-how-many-memory-locations-to-delete
Wygląda na to, że każdy kompilator robi to po swojemu, że jest to kwestia implementacji kompilatora. Zwykle rozmiar zaalokowanej pamięci jest gdzieś zapisywany, a w pierwszym linku są dwa tego przykłady.
Za to destruktor to zwyczajna funkcja, jeśli jest wirtualny to po prostu (to juƶ kwestia implementacji, standard nie nakazuje takiej) jego adres jest jednym z adresów w vtable, więc nie ma problemów z wywołaniem destruktora dla dynamicznego typu pod wskaźnikiem.
@trzeci:
@vipe: dobry materiał, dzięki za najdokładniejsza odpowiedź
Komentarz usunięty przez autora Wpisu
Komentarz usunięty przez autora