Jak wykonać Delete wskaźnika wskazującego na inny typ
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Jak wykonać Delete wskaźnika wskazującego na inny typ

AutorWiadomość
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:

C/C++
class Rodzic
{
public:
    int _A = 0;
};

class Dziedzic
    : public Rodzic
{
public:
    int _B = 0;
};

A następnie tworzę następujący pointer:
C/C++
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.
P-175485
» 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ć.
C/C++
class Rodzic
{
public:
    virtual ~Rodzic() { }
    int _A = 0;
};
P-175486
« 1 »
 Strona 1 z 1