我有这样的问题:我有课Foo,如果有这个类的一些对象,
Foo a();
Run Code Online (Sandbox Code Playgroud)
我需要把这个对象放到两个不同的向量:
std::vector<Foo> vA, vB;
Run Code Online (Sandbox Code Playgroud)
如果a在改变vA应该改变了vB,载体vA和vB可以不同,但它们可以有相同的对象.我知道可以使用Boost,但我不能使用Boost.
utn*_*tim 47
有一些可能性:
存储指针向量(如果向量共享指针的所有权,则使用):
std::vector<std::shared_ptr<Foo>> vA, vB;
Run Code Online (Sandbox Code Playgroud)存储包装引用的向量(如果向量不共享指针的所有权,则使用,并且您知道引用的对象在向量的生命周期内有效):
std::vector<std::reference_wrapper<Foo>> vA, vB;
Run Code Online (Sandbox Code Playgroud)存储原始指针的向量(如果您的向量不共享指针的所有权,则使用,和/或存储的指针可能会根据其他因素而改变):
std::vector<Foo*> vA, vB;
Run Code Online (Sandbox Code Playgroud)
这通常用于观察,跟踪分配等.原始指针的常见警告适用:在生命周期结束后不要使用指针访问对象.
存储std::unique_ptr包装对象的向量(如果您的向量想要移交指针的所有权,则使用这种情况,在这种情况下,引用对象的生命周期由std::unique_ptr类的规则控制):
std::vector<std::unique_ptr<Foo>> vA, vB;
Run Code Online (Sandbox Code Playgroud)alp*_*tis 11
你需要一个参考矢量.既然你指定你需要使用std :: vector,那么正确的做法是将你的对象包装在std::reference_wrapper.来自C++参考的这个页面应该很好地解释它:
vector<reference_wrapper<Foo>> vA, vB;
vA.push_back(a);
vB.push_back(a); // puts 'a' into both vectors
// make changes to 'a'
// use .get() to get the referenced object in the elements of your vector
// vA[0].get() == vB[0].get()
Run Code Online (Sandbox Code Playgroud)