我有 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
在 Main
类中。
这样做的正确方法是什么(指针、std::reference_wrapper、std::shared_ptr,...)?
最佳答案
您将面临 std::vector
的问题在需要增长时替换其内容,使过程中的任何指针、引用或迭代器失效。
因此,除非您确定不会将任何内容推送到您的 users
中 vector 同时 Clash
es 还活着,你需要:
在 vector 中保留一个索引 (
std::size_t
)。但是您还需要对 vector 本身的引用,因此您可以通过vec[idx]
访问您的对象。 .添加一个间接寻址:make
users
一个std::vector<std::unique_ptr<User>>
(或shared_ptr
,取决于您的设计)。然后User
物体本身永远不会移动。
关于c++ - 将对象从 vector 传递到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100058/