我有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,...)?
答案 0 :(得分:1)
您将面临std::vector
在需要增长时取代其内容的问题,使流程中的任何指针,引用或迭代器无效。
因此,除非您确定在users
es活着的时候不会将任何内容推送到Clash
向量中,否则您需要:
将索引(std::size_t
)保留在向量中。但是您还需要对矢量本身的引用,因此您可以通过vec[idx]
访问您的对象。
添加间接:将users
设为std::vector<std::unique_ptr<User>>
(或shared_ptr
,具体取决于您的设计)。然后User
对象本身不会移动。