我应该如何保留指向std :: unique_ptr的指针?

时间:2012-08-31 02:57:54

标签: c++ unique-ptr

我有一个矢量:

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

的指针

此外,在这里使用原始指针会被认为是不好的做法吗?指针不需要管理任何资源,但我不希望我的代码混乱。

1 个答案:

答案 0 :(得分:3)

对帖子的评论表明,使用“非拥有”容量的原始指针应该没问题。我倾向于同意这种普遍情绪,但你的案子需要进一步审查。

根据您的情况,您不应该使用“指向std :: unique_ptr的指针”。问题是当你(或维护程序员)添加到向量时,向量可以重新分配。如果是,则指针无效,不得使用。

一种选择是将索引用于向量而不是指针。如果您删除或重新排列向量中的条目,则会出现中断问题。

另一个更强大的选项是使用指向实际myClass对象的指针而不是拥有它的unique_ptr。通过使用对象的unique_ptrs向量而不是更常用的对象向量来启用此选项。