Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 2008
-
20 août 2008 à 15:03
Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 2008
-
23 août 2008 à 00:42
Bonjour à tous.
Voilà, j'ai une classe abstraite A :
class A{
private:
string m_name;
public:
A() {m_name = "default_name";}
virtual ~A() {}
virtual void print() = 0;
} ;
et une classe template dérivée de A et de list :
template< typename T >
class B : public A, public list<T> {
public:
B() : A() {}
~B() {}
} ;
Et dans mon main :
main()
{
A *a = new B[100];
delete[] a;
}
Le delete[] me donne une erreur de segmentation...
Notez que si je fais
A *a new B;
delete a;
tout marche bien.
D'où peut venir le problème ?
PS: désolé pour le gras j'ai pas réussi à l'enlever...
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 22 août 2008 à 22:32
Salut,
C'est pas un bug mais bien une erreur, on ne peut pas écrire A* a = new B[100];
un A n'a pas forcément la même taille qu'un B, donc on ne
peut pas voir un tableau de B comme un tableau de A (malgrés
le fait que B hérite bien de A).
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 21 août 2008 à 16:07
zaibacker : ce sont les fonctions virtuelles PURES qui doivent obligatoirement être implémentées, et même tu n'es pas obligé du moment que ta classe dérivée est une classe abstraite aussi.
Mais bon en effet dans la majorité des cas...
Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 20081 21 août 2008 à 22:21
Quand je remplace, dans le main :
propertyBase *a = new property[100] ;
par
property *a = new property[100] ;
Ca fonctionne...
Peut-être un problème au niveau des destructeurs virtuels, c'est la première fois que je m'en sers, mais j'ai rien trouvé de très précis ni avec Google, ni dans mes 2 bouquins de 500 pages :/
Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 20081 21 août 2008 à 23:34
Et quand je supprime la dérivation par list (ie B ne dérive que de A) ca fonctionne aussi.
Ce serait l'appel au destructeur de list qui poserait problème ? Oô
Là je rame... D'autant plus que le code fonctionne chez vous ^_^
Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 20081 23 août 2008 à 00:42
Je vais te croire sur parole, n'ayant rien pu trouver sur Internet (là je suis en train de fouiller « ISO/IEC 14882: Programming Language C++ » ... >_<")