Мне нужно хранить ссылки на экземпляры производных классов в C++. Я рассмотрел использование вектора shared_ptrs для базового класса (поскольку для его хранения требуются разные типы производных классов), однако важно, чтобы контейнер содержал исходные указатели, что не относится к векторам (или другим контейнерам stl), если я не ошибаюсь. Есть ли способ сделать это на родном C++, или мне нужно использовать специальные контейнеры, такие как post_vector Boost?C++: Контейнер исходных указателей
EDIT: Это мой тестовый код:
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;
}
Спасибо заранее,
Jena
Будет ли вектор (вектор указателей на ваши объекты) не подходит для вас? –
JoshD
Мне непонятно, почему контейнер 'shared_ptr' не будет работать для вас. –
Я пробовал это, но когда я добавляю указатель экземпляра через vector.push_back (& instance), указатель в векторе отличается от исходного. – jena