Aktywne Wpisy
legion_9000 +2
#boks moim zdaniem nie ustawka Paul cały czas uciekał a kogoś takiego zawsze ciężko trafić, przy ciosach na górę uciekał tułowiem na dół potem albo klincz albo się kładł więc właściwie dlatego tylko przetrwał, jakby stał jak słup soli jak Nagano to by było KO 1 runda

dobra, będę oglądać. za kim mam być?
#boks
#boks
ankieta
- joshua 77.3% (17)
- jake 22.7% (5)





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