HDR gaming
HDR gaming

Reputation: 81

alternative to std::vector for storing references instead of copies of objects

I'm a Java developer and I'm new to C++.
With Java: I can do the following

myArrayList.add(obj);

in 'myArrayList' I will find a reference (a pointer) to 'obj'
However with C++: I know that

std::vector::push_back(obj);

Will insert a copy of 'obj' into the vector and not a reference. This would usually not be a problem if it wasn't for the high number of operations and objects created.

My problem:
Performance problems due to high number of created and duplicated objects by using std::vector.
What I need:
an alternative to std::vector or some other way to make dynamic lists of references (pointers) without duplicating objects.

PS: I know about making an array of pointers like this

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

I can't use this as the max_size is never known.

Thanks for the help.

Upvotes: 1

Views: 1060

Answers (2)

Jake Freeman
Jake Freeman

Reputation: 1698

An easy way to solve this is to just use pointers. Here is an example:

struct N { int x; };

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

Upvotes: 0

user7860670
user7860670

Reputation: 37523

You can store a reference wrapper instead:

#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();

Note that (unlike in Java) objects are not managed by GC, it is programmer's responsibility to ensure that references object survives long enough so stored reference is valid.

Upvotes: 3

Related Questions