Bonjour
J'ai un morceau de code assez étrange:


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
void UneFonction (const MaClasse& IT_member) {
        if (isSet && (__d != ::VSIVOTKind_float))
        {
            this-> VSIVOT::~VSIVOT();
            memset(this, 0, sizeof(*this));
        }
__d = ::VSIVOTKind_frabasis;
 
     if ( !isSet )
        {
            _uneVariable_ = new MaClasse;
            isSet = 1;
        }
 
*(_uneVariable_) = IT_member;

En gros, il appelle lui même son propre destructeur, puis il appelle la fonction memset, qui fixe à 0 la plage libérée. OK.

Ensuite, il se reconstruit à la volée.

C'est assez rare de voir çà. Qu'en pensez vous? Ce code a été fait à mon avis par quelqu'un d'expérimenté, donc je ne critique pas à priori.
Mais j'aimerais savoir ce que vous en pensez, quels sont les cas dans lesquels on a besoin de faire ca.

merci