Destructeur doit-il être virtuel ou non ?
Bonjour,
voilà le code:
Code:
1 2 3 4
|
template<typename T>
struct SmartPointerGeneric: public SmartPointer<GenericReference<T>, T>
{}; |
La classe SmartPointer ne définit aucune méthode virtuelle.
Cela pose-t-il un problème si le destructeur de la classe SmartPointer n'est pas virtuel ?
Dans ce cas, il n'y a aucune variable membre ajoutée dans la classe fille.
Mais dans ce cas:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
template<typename T> struct GenericReference
{
~GenericReference()
{
free();
}
virtual void free()
{
delete _Ptr, _Ptr = 0;
}
int count;
T *_Ptr;
}
struct SDL_Surface_Reference: public GenericReference<SDL_Surface>
{
virtual void free() override
{
SDL_FreeSurface(_Ptr); _Ptr = 0;
}
HahaHihiHoho npk;
} |
Est-ce une erreur de ne pas mettre le constructeur virtuel ?
Et même si le constructeur n'est pas virtuel, est ce que le destructeur de npk (npk::~HahaHihiHoho()) sera appelé ?
Merci ;)