C ++在矢量中使用指针可能会导致指针悬空吗?

问题描述 投票:0回答:1
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总是更好吗?

c++ c pointers vector memory-management
1个回答
1
投票

这很好

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指向向量的内部,如果发生重新分配,该向量将被删除。

© www.soinside.com 2019 - 2024. All rights reserved.