c++ - 如何在 C++ 中将对来自一个 vector 的对象的引用存储在另一个 vector 中?

标签 c++ pointers reference shared-ptr unique-ptr

我有一个 vector std::vector<MyClass> myclass_vec(10)有 10 个初始化对象 MyClass .现在我想遍历这个 vector 并存储对每个 MyClass 的引用另一个 vector 中的对象 std::vector<MyClass> myclass_vec_refs .我想存储引用的原因是因为我不必复制对象,显然,引用与 myclass_vec 中相同的对象。 .

出于某种原因,这不符合方面。我必须申报吗 std::vector<&MyClass> myclass_vec_refs像这样?

当我浏览这里提出的其他问题时,我读到了关于 std::unique_ptr 的信息.如果我改变 std::vector<std::unique_ptr<MyClass>> myclass_vec(10)那么我将无法在 myclass_vec_refs 中获得引用或指针因为它们被声明为唯一的。如果我弄错了,请纠正我。

另一种方法是使用 std::shared_ptr .因为它有一个引用计数器,所以我可以拥有 myclass_vec_refs指向 myclass_vec 中的对象,但我读到这引入了相当多的开销,share_ptr 应该只作为最后的手段使用。

我也不知道像我尝试的那样引用是否有效。如果 myclass_vec 中的对象会发生什么被删除?是 myclass_vec_refs vector 调整大小 -1 因为对象不再存在或者它只是指向坏内存?

是否可以emplace_back myclass_vec_refs 中的引用 vector ?因为这会就地创建对象,所以我想这行不通,只有 push_back可以用吗?

最佳答案

不能创建一个引用 vector 。 为什么?

引用必须始终引用实际对象,并且 vector 设计必须能够为您动态创建“空”对象(即默认构造函数)。

但是您可以创建一个指针 vector 。

如果以任何方式修改了另一个 vector ,您的指针将变得无效。 如果这对您来说是个问题,请改用 map 设置

关于c++ - 如何在 C++ 中将对来自一个 vector 的对象的引用存储在另一个 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145696/

相关文章:

c++ - (int **array;) 创建了什么?

java - 复制引用数组

C++ 引用和指针

c++ - C++ 中的洪水填充算法

c++ - 从 bitset 创建单色 BMP

c++ - 使用 grep 命令一个 .hpp 文件获得匹配的二进制文件

c++ - 迭代器的默认值是多少?

c++ - 无法将参数 3 从 'const QGraphicsItem *' 转换为 'const QObject *' ,即 this 指针,对象是 QGraphicsObject 的子类

c - 是否可以从嵌套函数调用返回的对象中获取指针?

symfony - 序列化类 "App\Entity\User"的对象时检测到循环引用(配置限制: 1)