héritage template virtual destructeur
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:
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 ?