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

时间:2015-12-05 01:09:10

标签: c++ vector

我有3个班级:

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对象,其中的字段指向来自std::vector users的两个对象{ {1}}上课。

这样做的正确方法是什么(指针,std :: reference_wrapper,std :: shared_ptr,...)?

1 个答案:

答案 0 :(得分:1)

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

因此,除非您确定在users es活着的时候不会将任何内容推送到Clash向量中,否则您需要:

  • 将索引(std::size_t)保留在向量中。但是您还需要对矢量本身的引用,因此您可以通过vec[idx]访问您的对象。

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