Bonjour,

Dans le cas ou je crée une classe template de base avec un destructeur virtuel, et que j'hérite de cette classe de base, ai-je l'assurance que le destructeur de la classe dérivée soit toujours appelé si je manipule que des pointeur de base ?

Exemple :

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
27
28
 
#include <iostream>
 
using namespace std;
 
template <typename T> class Base
{
public:
    Base(const T &_tparam = T()):tparam(_tparam){}
    virtual ~Base(){ cout << "Call ~Base()" << endl; }
 
    T tparam;
};
 
class Derived : public Base<int>
{
public:
    Derived(const int &_integer):Base<int>(_integer){}
    ~Derived(){ cout << "Call ~Derived()" << endl; }
};
 
 
int main (int /*argc*/, char * /*argv*/[])
{
    Base<int> * ptr = new Derived(0);
    delete ptr;
    return 0;
}
Cet exemple fonctionne (gcc 4.4.5), mais je crains que dans un gros projet avec plusieurs classes dérivées cela ne fonctionne plus, car peut être que je risque d'exploser la VTABLE ? Sinon comment faire ?