C++ 使用unique_ptr向量中的原始指针作为排序ID

C++ 使用unique_ptr向量中的原始指针作为排序ID,c++,oop,pointers,unique-ptr,C++,Oop,Pointers,Unique Ptr,我想问一下这是否是一个好的做法。让我们假设这个场景: std::vector<unique_ptr<Model>> data; std::矢量数据; 使用此向量的原始指针(向量中每个唯一的\u ptr的原始指针)安全吗?我知道向量可能会在超出保留空间时重新分配数据,但这只会影响unique_ptr的地址,同时保证内部原始指针保持不变,对吗 因此,使用这些原始指针而不是添加一些id成员来标识模型安全吗 更具体地说,在地图中使用这些原始指针作为键可以吗?我需要从向量中对包

我想问一下这是否是一个好的做法。让我们假设这个场景:

std::vector<unique_ptr<Model>> data;
std::矢量数据;
使用此向量的原始指针(向量中每个唯一的\u ptr的原始指针)安全吗?我知道向量可能会在超出保留空间时重新分配数据,但这只会影响unique_ptr的地址,同时保证内部原始指针保持不变,对吗

因此,使用这些原始指针而不是添加一些id成员来标识模型安全吗

更具体地说,在地图中使用这些原始指针作为键可以吗?我需要从向量中对包含模型指针(作为成员)的对象进行排序,并使用相同的模型对对象进行分组

我知道我可以在向量或唯一ID中使用一些句柄,比如索引,但这可能是一个无用的开销。我问这个问题的原因是,依赖指针地址对我来说有点不安全:-)

是的!没关系:)


只需像往常一样确保对象比其指针寿命长。

是的,这是安全的。即使向量重新分配,unique_ptr中的底层指针也不会改变。@CoryKramer Thak you!谢谢是的,寿命还可以。使用这样的指针感觉有点奇怪^