liberer memoire avec destruction derivee

Le
dug8C
bonjour,

Je voudrais avoir une confirmation, si lorsque je dtruis le pointeur
d'une classe de base, je dtruis bien la totalit de la mmoire
alloue pour la classe qui en drive.
exemple:

class CBase
{
/* divers membres */
};

class CDerive : public CBase
{
/*divers autres membres */
};


/* */

dans le main :

CBase* pBase;
pBase = new CDerive;

delete pBase;

Est ce que la mmoire alloue par new est bien restitue en
intgralit ou bien est-ce que je ne libre que la partie de CBase ?

mon but est de stocker dans un container des pointeurs de CBase pour
grer des CDerive ( construction et suppression )
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mathias Gaunard
Le #309814
bonjour,

Je voudrais avoir une confirmation, si lorsque je détruis le pointeur
d'une classe de base, je détruis bien la totalité de la mémoire
allouée pour la classe qui en dérive.
exemple:

class CBase
{
/*--- divers membres */
};

class CDerive : public CBase
{
/*---divers autres membres */
};


/* --- */

dans le main :

CBase* pBase;
pBase = new CDerive;

delete pBase;


Il s'agit d'un comportement indéfini, sauf si le destructeur de CBase
est virtuel.

S'il est bien virtuel, aucun soucis.

dug8C
Le #309689
On 24 juil, 21:12, Mathias Gaunard



bonjour,

Je voudrais avoir une confirmation, si lorsque je détruis le pointeur
d'une classe de base, je détruis bien la totalité de la mémoire
allouée pour la classe qui en dérive.
exemple:

class CBase
{
/*--- divers membres */
};

class CDerive : public CBase
{
/*---divers autres membres */
};

/* --- */

dans le main :

CBase* pBase;
pBase = new CDerive;

delete pBase;


Il s'agit d'un comportement indéfini, sauf si le destructeur de CBase
est virtuel.

S'il est bien virtuel, aucun soucis.


Oui effectivement j'ai oublié de mentinonner le destructeur virtuel de
CBase.

Ok merci pour la réponse.


Publicité
Poster une réponse
Anonyme