Bonjour,
Je poursuis mon apprentissage du C++ et la j'ai besoin de savoir comment remplacer les pointeurs à la C par des pointeurs intelligents shared_ptr (je n'ai pas c++ 2011 juste la librairie boost ) dans ma collection hétérogène:
toolbox.h:
toolbox.cpp:
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 #ifndef TOOLBOX_H #define TOOLBOX_H #include "multimedia.h" #include "photo.h" #include "video.h" #include <iostream> #include <vector> class ToolBox { public: //Constructeur ToolBox(); //Methode d'ajout de pointeur sur des multimedia void ajouter_multimedia(Multimedia* nouveau); //Methode d'affichage void afficher() const; //Destructeur pour liberer la memoire allouee void liberer(); private: std::vector<Multimedia*> multimedia; //Constructeur de copie ToolBox(const ToolBox& autre); //Operateur d'affectation ToolBox& operator=(const ToolBox& source); }; #endif // TOOLBOX_H
J'ai fait des recherches mais il est dit que les shared_ptr ne sont incompatibles avec les raw pointers, qu'est-ce-que cela signifie??
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
39
40
41
42
43
44
45
46
47
48
49
50
51 #include "toolbox.h" //#include <boost/utility/swap.hpp> ToolBox::ToolBox() : multimedia(){} ToolBox::ToolBox(const ToolBox& autre) : multimedia() { for(size_t i(0); i < autre.multimedia.size(); ++i) multimedia.push_back(autre.multimedia[i]->copie()); } ToolBox& ToolBox::operator=(const ToolBox& source) { if(this != &source) { liberer(); for(size_t i(0); i < source.multimedia.size(); ++i) multimedia.push_back(source.multimedia[i]->copie()); } return *this; /*boost::swap(multimedia, source.multimedia); return *this;*/ } void ToolBox::ajouter_multimedia(Multimedia* nouveau) { if(nouveau != NULL) { multimedia.push_back(nouveau); } } void ToolBox::afficher() const { for(size_t i(0); i < multimedia.size(); ++i) { multimedia[i]->afficher(std::cout); std::cout << std::endl; } } void ToolBox::liberer() { for(size_t i(0); i < multimedia.size(); ++i) { delete multimedia[i]; } multimedia.clear(); }
Partager