Je dois stocker des références aux instances de classes dérivées en C++. J'ai considéré utiliser un vecteur de shared_ptrs à la classe de base (car il doit contenir différents types de classes dérivées), cependant, il est important que le conteneur contienne les pointeurs d'origine, ce qui n'est pas le cas avec les vecteurs (ou autres conteneurs stl), si je ne me trompe pas. Y at-il un moyen de le faire en C++ natif, ou dois-je utiliser des conteneurs spéciaux comme ptr_vector de Boost?C++: conteneur de pointeurs d'origine
EDIT: Ceci est mon code de test:
class Foo
{
public:
Foo() {}
virtual ~Foo() {}
virtual void set_x(int i) = 0;
};
class Bar : public Foo
{
public:
Bar() {}
void set_x(int i)
{
this->x = i;
}
int x;
};
int main()
{
Bar bar;
// ptr
std::cout << &bar << "\n";
std::vector<Foo*> foos;
foos.push_back(&bar);
// different ptr value
std::cout << &foos[0] << "\n";
foos[0]->set_x(1);
// however, changes are made
std::cout << bar.x;
return 0;
}
Merci à l'avance,
jena
Est-ce que le vecteur (un vecteur de pointeurs vers vos objets) ne fonctionnerait pas pour vous? –
JoshD
il n'est pas clair pour moi pourquoi un conteneur de 'shared_ptr' ne fonctionnera pas pour vous. –
J'ai essayé cela, mais quand j'ajoute le pointeur d'une instance via vector.push_back (& instance), le pointeur dans le vecteur diffère de celui d'origine. – jena