Bonjour,
je cherche à comprendre les static_pointer_cast et les dynamic_pointer cast. On m'a indiqué que ces templates permettent de faire des cast de shared_ptr.
Cependant en relisant l'extrait de code suivant, j'avoue avoir du mal à comprendre :
J'obtiens alors en sortie :
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
29
30
31
32
33
34
35
36
37
38 #include <iostream> #include <memory> using namespace std; class Polygone{ public: virtual void display(){cout << "Polygone" << endl;} }; class Triangle : public Polygone{ public: virtual void display(){cout << "Triangle display" << endl;} virtual void display2(){cout << "Triangle display2" << endl;} }; int main(int argc, char* argv[]){ shared_ptr<Polygone> l_sharedPtrPoly(new Polygone); l_sharedPtrPoly->display(); shared_ptr<Triangle> l_sharedPtrTriSt = static_pointer_cast<Triangle>(l_sharedPtrPoly); l_sharedPtrTriSt->display(); // Downcast d'un objet polymorphique avec dynamic_pointer_cast shared_ptr<Triangle> l_sharedPtrTriDyn = dynamic_pointer_cast<Triangle>(l_sharedPtrPoly); if(l_sharedPtrTriDyn){ l_sharedPtrTriDyn->display(); l_sharedPtrTriDyn->display2(); }else{ cout << "Pointeur nul" << endl; } return 0; }
Polygone
Polygone
Pointeur nul
Voici ce qui me questionne :
1) Je m'attendrais à obtenir en sortie Triangle sur la 2ème ligne. Là, je ne comprends pas l'intérêt du cast.
2) Je ne comprends pas la 3eme ligne. C'est comme si le cast n'avait pas fonctionné et le pointeur est non initialisé. Est-ce que cela est dû qu'ici mes objets ne sont pas dynamiques?
Merci par avance de vos réponses.
Partager