Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liberer memoire avec destruction derivee

2 réponses
Avatar
dug8C
bonjour,

Je voudrais avoir une confirmation, si lorsque je d=E9truis le pointeur
d'une classe de base, je d=E9truis bien la totalit=E9 de la m=E9moire
allou=E9e pour la classe qui en d=E9rive.
exemple:

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

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


/* --- */

dans le main :

CBase* pBase;
pBase =3D new CDerive;

delete pBase;

Est ce que la m=E9moire allou=E9e par new est bien restitu=E9e en
int=E9gralit=E9 ou bien est-ce que je ne lib=E8re que la partie de CBase ?

mon but est de stocker dans un container des pointeurs de CBase pour
g=E9rer des CDerive ( construction et suppression )

2 réponses

Avatar
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.

Avatar
dug8C
On 24 juil, 21:12, Mathias Gaunard wrote:



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.