2

我有一个向量:

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.

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

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

4

1 回答 1

3

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

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

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

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

于 2012-08-31T04:13:36.857 回答