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 :
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 ?
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; }
Partager