Jak wykonać Delete wskaźnika wskazującego na inny typ
Ostatnio zmodyfikowano 2019-11-04 17:54
pajczur Temat założony przez niniejszego użytkownika |
Jak wykonać Delete wskaźnika wskazującego na inny typ » 2019-11-04 14:07:14 Witam serdecznie, mam pewne wątpliwości związane z dealokacją pamięci różnych typów klas. Nawet nie jestem pewien czy to prawidłowo opisuję, więc po prostu pokażę na przykładzie. Załóżmy, że mam następujące klasy: class Rodzic { public: int _A = 0; };
class Dziedzic : public Rodzic { public: int _B = 0; };
A następnie tworzę następujący pointer: Rodzic * rodzic = new Dziedzic;
I moje pytanie to, jak prawidłowo zdealokować taki pointer. Bo przecież jeżeli użyję po prostu delete rodzic; to program będzie próbował zdealokować ilość pamięci odpowiadającej sizeof( Rodzic ); a przecież pisząc new Dziedzic; alokujemy więcej pamięci (w tym przypadku więcej o ten int _B ). Bardzo proszę o pomoc. Z góry wielkie dzięki. |
|
pekfos |
» 2019-11-04 17:54:53 To nie ma wpływu na ilość zdealokowanej pamięci, ale ma wpływ na to, jakie destruktory zostaną wywołane. Klasa Rodzic powinna mieć wirtualny destruktor, żeby wszystko działało poprawnie. Może nawet niczego nie robić. class Rodzic { public: virtual ~Rodzic() { } int _A = 0; }; |
|
« 1 » |