我有一个矢量:
std::vector<std::unique_ptr<myClass>> vec;
//filling the vector
vec.push_back(std::unique_ptr<myClass>(new myClass()));
vec.push_back(std::unique_ptr<myClass>(new myClass()));
vec.push_back(std::unique_ptr<myClass>(new myClass()));
我需要一个特定myClass
实例的句柄,不需要担心所有权,例如:
std::unique_ptr<myClass>& myInstance;
问题是myInstance
在运行时需要指向myClass
的不同实例。
我知道我可以使用std::shared_ptr
,但我想保留std::unique_ptr
,所以如果添加了已初始化的内容,则所有权会转移到vec
。
我应该如何保留指向std::unique_ptr
?
此外,在这里使用原始指针会被认为是不好的做法吗?指针不需要管理任何资源,但我不希望我的代码混乱。
答案 0 :(得分:3)
对帖子的评论表明,使用“非拥有”容量的原始指针应该没问题。我倾向于同意这种普遍情绪,但你的案子需要进一步审查。
根据您的情况,您不应该使用“指向std :: unique_ptr的指针”。问题是当你(或维护程序员)添加到向量时,向量可以重新分配。如果是,则指针无效,不得使用。
一种选择是将索引用于向量而不是指针。如果您删除或重新排列向量中的条目,则会出现中断问题。
另一个更强大的选项是使用指向实际myClass对象的指针而不是拥有它的unique_ptr。通过使用对象的unique_ptrs向量而不是更常用的对象向量来启用此选项。