Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
struct S0
{
 ...
 virtual void Close();
 virtual ~S0() { Close(); }
};
 
struct S0D: S0
{
 ...
 virtual void Close() { ...; S0::Close(); }
};
J'ai une méthode virtual Close() dans une classe de base qui est appelée par son destructeur. La classe dérivée surcharge cette méthode Close() en faisant un traitement spécifique puis appelle la méthode Close() parente. Il me semble que c'est une manière assez classique de coder.
La problème survient quand on "oublie" de surcharger le destructeur de la classe dérivée. En fait je trouve assez pompant de devoir répéter le même code dans chaque destructor des classes dérivées, à savoir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 virtual ~S0_derived() { Close(); }
Quelles sont vos habitudes de conception dans ce genre de cas ?
Merci.