我有这样的问题:我有类 Foo
,如果有这个类的一些对象,
Foo a();
我需要将此对象放入 2 个不同的 vector 中:
std::vector<Foo> vA, vB;
如果 a
在 vA
中发生变化,它应该在 vB
中发生变化, vector vA
和 vB
可以不同,但它们可以有相同的对象。我知道可以使用 Boost,但我不能使用 Boost。
最佳答案
有一些可能性:
存储一个指针 vector (如果您的 vector 共享指针的所有权,则使用):
std::vector<std::shared_ptr<Foo>> vA, vB;
存储包装引用的 vector (如果 vector 不共享指针的所有权,并且您知道所引用的对象在生命周期之后是有效时使用 vector ):
std::vector<std::reference_wrapper<Foo>> vA, vB;
存储原始指针 vector (如果您的 vector 不共享指针的所有权,和/或存储的指针可能会因其他因素而改变):
std::vector<Foo*> vA, vB;
这在观察、跟踪分配等方面很常见。原始指针的常见警告适用:不要使用指针在其生命周期结束后访问对象。
存储包装对象的
std::unique_ptr
vector (如果您的 vector 想要移交指针的所有权在这种情况下使用生命周期引用的对象由std::unique_ptr
类的规则管理):std::vector<std::unique_ptr<Foo>> vA, vB;
关于c++ - std::vector 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23488326/