我是一名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 从未被人知道。
感谢您的帮助。
答案 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);
}