В моем коде a есть глобальный вектор объекта Node и локальный вектор указателей Node:
#include<cstdio>
#include<cstdlib>
#include<vector>
using namespace std;
class Node {
int n;
public:
Node(int i) : n(i);
int getN() { return n; }
};
vector<Node> v;
int main() {
vector<Node*> p;
v.push_back(Node(1));
p.push_back(&v[0]);
printf("first node id : %d\n", (*p[0]).getN());
return 0;
}
Я вставил объект Node в глобальный вектор и вставил указатель этого объекта в локальный вектор. Вывод моего кода выше:
first node id : 1
Однако, если я изменю свою основную функцию на это:
int main()
{
vector<Node*> p;
v.push_back(Node(1));
p.push_back(&v[0]);
v.push_back(Node(2));
p.push_back(&v[1]);
printf("first node id : %d\n", (*p[0]).getN());
return 0;
}
Код печатает значение мусора:
first node id : 32390176
Я не могу понять проблему.
Изменяет ли структура данных vector
ссылки каждого объекта после вставки?
Как я могу это исправить?