将对象从一个向量传递到另一个类

Passing a objects from a vector to another class

本文关键字:向量 另一个 一个 对象      更新时间:2023-10-16

我有三个类:

class User{
}
class Main{
public:
   void AddClash(){
       clash.push(Clash(...))
   }
private:
   std::vector<User> users;
   std::vector<Clash> clash;
}
class Clash{
public:
   //constructor
private:
   std::array<...,2> users;
}

我希望在Main类中有一个方法,它将创建一个Clash对象,该对象具有指向Main类中std::vector users中两个对象的字段。

正确的方法是什么(指针,std::reference_wrapper,std::shared_ptr,…)?

您将面临std::vector在需要增长时替换其内容的问题,从而使过程中的任何指针、引用或迭代器无效。

因此,除非你确信在Clash es活着的时候不会有任何东西被推入你的users矢量,否则你需要:

  • 在向量中保留一个索引(std::size_t)。但您还需要对向量本身的引用,这样您就可以通过vec[idx]访问对象。

  • 添加间接:将users设为std::vector<std::unique_ptr<User>>(或shared_ptr,具体取决于您的设计)。那么User对象本身将永远不会移动。