class Thing {
public:
Thing();
void dosomething(int i);
};
Thing::Thing() {};
void Thing::dosomething(int i) {
std::cout << i << "\n";
};
std::vector<Thing*> thingsList;
Thing a = {};
Thing b = {};
Thing c = {};
thingsList.push_back(&a);
thingsList.push_back(&b);
thingsList.push_back(&c);
thingsList[0]->dosomething(2);
上面的代码为我编译并工作。但是我想知道这是否会引起问题。考虑到向量随着向量的增长/缩小而重新分配其内存数组。当向量动态重新分配时,是否有可能会导致指针悬空?还是矢量处理了这个问题?
使用unique_ptr总是更好吗?
这很好
Thing t0, t1;
vector<Thing*> v;
v.push_back(&t0);
v.push_back(&t1);
即使第二个push_back
导致重新分配,v[0]
仍将指向t0
。
这不好
Thing t0, t1;
vector<Thing> v;
v.push_back(t0);
Thing* tp = &v[0];
v.push_back(t1);
这里第二个push_back
可能会使tp
指针无效,因为tp
指向向量的内部,如果发生重新分配,该向量将被删除。