2017-10-19 153 views
2

我很想问这是否是一种好的做法。让我们假设这样的场景:使用unique_ptr矢量的原始指针作为排序的ID

std::vector<unique_ptr<Model>> data; 

它是安全与此向量(原始指针从向量中的每个的unique_ptr)的原始指针工作?我明白,当超过保留空间时,向量可能会重新分配数据,但只会影响unique_ptr的地址,而内部原始指针保证保持不变。

因此,通过使用这些原始指针而不是添加一些id成员来识别模型是否安全?

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

我知道我可以使用像索引一些句柄到矢量或唯一的ID,但这可能是无用的开销。我问的原因是,根据指针地址感觉某种程度上对我不安全:-)

+1

是的,它是安全的。即使向量重新分配,unique_ptrs中的底层指针也不会改变。 – CoryKramer

+0

@CoryKramer谢谢你! – Hitokage

回答

3

是的!这很好:)

只是像往常一样确保对象超出他们的指针。

+0

谢谢!是的,寿命是确定的。它只是觉得奇怪的使用这样的指针!^_ ^ – Hitokage