Bonjour,
désolé de vous innodé de question aujourd'hui, mais j'aimerai savoir si le comportement suivant est "normal" :

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
 
#include <iostream>
 
struct A {
  virtual ~A() = default;
};
 
struct B : A {
  virtual ~B() {
    std::cout << "B destructor" << std::endl;
  }
};
 
int main() {
  B* b = new B;
  A & refA = *b;
  delete &refA;
  return 0;
}
donne :
????

alors que
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
 
#include <iostream>
 
struct A {
  virtual ~A() {}
};
 
struct B : A {
  virtual ~B() {
    std::cout << "B destructor" << std::endl;
  }
};
 
int main() {
  B* b = new B;
  A & refA = *b;
  delete &refA;
  return 0;
}
donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
./leakTest
B destructor
Est-ce un bug, ou =default est sensé supprimé la virtualité ? Merci d'avance !