1
我有对象的矢量和由名称(字符串)的索引(地图)到那些对象。 在我的情况下,矢量只增长(项目永远不会被删除)。
我不知道这个
struct Foo { };
std::vector<Foo> v;
std::map<std::string,Foo*> m; // addresses are &v[0], &v[1], etc...
因为我添加项目到v
,老映射在m
可能成为无效应该v
被realloc'ed。
问题
如果我通过std::unique_ptr<>
添加额外的抽象级别,将m
是确定应v
被realloc'ed?
struct Foo { };
std::vector<std::unique_ptr<Foo>> v;
std::map<std::string,Foo*> m; // addresses are v[0].get(), v[1].get(), etc...
我认为答案是肯定的,由于复制elision,但我不知道。
,除非你真的需要在载体中的项目将被存储在一个连续的内存区域,你可能想看看['标准:: deque'(HTTP: //en.cppreference.com/w/cpp/container/deque)。指向元素deque(或迭代器)的指针永远不会失效(除非元素当然被移除)。 –
'std :: map'其中int是索引到vector中。那么重新分配没有问题。 –
john
@john是的,我认为索引/间接 - 我只是想知道上述解决方案是否会解决问题 – kfmfe04