Bonjour,

voilà le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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