Possible en double:
C++: why isnew
needed?Quel est le problème avec malloc() et les fonctions virtuelles?
Pourquoi ne puis-je utiliser malloc pour allouer de l'espace pour mes objets quand ils sont les enfants d'une classe contenant des fonctions virtuelles? C'est vraiment frustrant. Y a-t-il une bonne raison?
Le programme suivant illustre le problème. Il segfaults sur la ligne 27, où j'appelle aa-> f()
#include <iostream>
#include <cstdlib>
class A
{
public:
virtual int f() {return 1;}
};
class B
{
public:
int f() {return 1;}
};
class Aa : public A {};
class Bb : public B {};
int main()
{
Aa* aa = (Aa*)malloc(sizeof(Aa));
Aa* aan = (Aa*)new Aa();
Bb* bb = (Bb*)malloc(sizeof(Bb));
std::cout << bb->f() << std::endl;
std::cout << aan->f() << std::endl;
std::cout << aa->f() << std::endl;
return 0;
}
Version info: g ++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
Solution ici: http://stackoverflow.com/questions/4904762/c-why-is-new-needed/4904873#4904873 –
@Tomalak: vous devriez voter pour fermer en double si vous le pouvez (je crois que 5k rep vous êtes autorisé à) –
La réponse est simple. 'new' est la façon correcte de créer de nouvelles instances de classes en C++. 'malloc' n'est pas. –