Je lisais le chapitre 13 de l'amorce C++ "Class Inheritance", quelque chose à propos de l'opérateur d'affectation dans la classe dérivée me confondre. Voici le cas: En classe de base:Opérateur d'affectation de classe dérivé C++
class baseDMA
{
private:
char * label;// label will point to dynamic allocated space(use new)
int rating;
public:
baseDMA & operator=(const baseDMA & rs);
//remaining declaration...
};
//implementation
baseDMA & baseDMA::operator=(const baseDMA & rs)
{
if(this == &rs)
{
return *this;
}
delete [] label;
label = new char[std::strlen(rs.label) + 1];
std::strcpy(label,rs.label);
rating = rs.rating;
return *this;
}
// remaining implementation
En classe dérivée
class hasDMA : public baseDMA
{
private:
char * style;// additional pointer in derived class
public:
hasDMA & operator=(const hasDMA& rs);
//remaining declaration...
};
// implementation
hasDMA & hasDMA::operator=(const hasDMA & hs)
{
if(this == &hs)
return *this;
baseDMA::operator=(hs);
style = new char[std::strlen(hs.style) + 1];
std::strcpy(style, hs.style);
return *this;
}
// remaining implementation
ma question est la suivante: dans la définition de l'opérateur d'affectation de classe dérivée, pourquoi ne pas avoir besoin de supprimer le style d'abord (comme supprimer label dans baseDMA) avant de lui attribuer de nouveaux espaces?
Merci.
Vous devez l'effacer sinon vous perdrez de la mémoire. –