Questions sur les pointeurs intelligents
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:
Code:
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 |
toolbox.cpp:
Code:
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();
} |
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??