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 : 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
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
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??