I tried to modify pointer of object in array like this.
array<unique_ptr<Object>, OBJ_SIZE> OtherList; // All Object were allocated already.
array<Object*, OBJ_SIZE> ObjectList;
Object* GetPointerFromOtherList(int i) { return OtherList[i].get(); }
for(int i = 0; Object* obj : ObjectList)
{
// Store pointer of pre-allocated object
obj = GetPointerFromOtherList(i);
i ;
}
But when I access to this objects, it seems like it's empty.
for(Object* obj : ObjectList)
{
// Access violation because obj is null.
obj->doSomething();
}
I tried other way too.
for(int i = 0; auto& obj : ObjectList)
{
// store pointer of pre-allocated object.
obj = GetPointerFromOtherList(i);
i ;
}
and this work.
The auto&
keyword is same as Object*&
. and I don't really understand why the first method didn't worked and second one worked otherwise. Can someone explain this to me?
CodePudding user response:
With Object* obj : ObjectList
, obj
is a copy of the pointer element of ObjectList
. Assigning to that copy with obj = GetPointerFromOtherList(i);
doesn't change anything in the container, since obj
is just a completely independent variable.
With Object*& obj : ObjectList
, obj
is a reference to the pointer element in ObjectList
. When you assign to it with obj = GetPointerFromOtherList(i);
, you are assigning to the pointer element inside ObjectList
.