std :: vector的替代方法,用于存储引用而不是对象的副本

时间:2017-11-26 15:12:46

标签: c++ object vector reference

我是一名Java开发人员,而且我是C ++的新手 使用Java:我可以执行以下操作

myArrayList.add(obj);

在myArrayList'我会找到一个参考(指针)到对象'
但是使用C ++:我知道

std::vector::push_back(obj);

将插入一份' obj'进入矢量而不是参考。如果没有创建大量操作和对象,这通常不会成为问题。

我的问题:
使用std :: vector导致大量创建和重复对象导致的性能问题 我需要的是什么:
std :: vector的替代方法或其他一些方法来制作引用的动态列表(指针),而不会复制对象。

PS:我知道要制作像这样的指针数组

MyClass** dynamic_array = new MyClass*[max_size];

我无法使用此功能,因为 max_size 从未被人知道。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以存储引用包装器:

#include <functional>    

MyClass item;
::std::vector<::std::reference_wrapper<MyClass>> items;
items.emplace_back(item);
// accessing an item will involve an extra call of get() method
items.back().get();

请注意(与Java不同)对象不受GC管理,程序员有责任确保引用对象存活足够长时间,以便存储引用有效。

答案 1 :(得分:0)

解决这个问题的一个简单方法就是使用指针。这是一个例子:

struct N { int x; };

void test()
{
    N temp;
    std::vector<N*> x;
    x.push_back(&temp);
}