Перемещает ли объект в списке его местоположение в памяти? - PullRequest
0 голосов
/ 19 июня 2020

Например,

struct MyStruct
{
    MyStruct* myStruct;
};

MyStruct a;
MyStruct b;

a.myStruct = &b;
b.myStruct = &a;

std::list<MyStruct> myList;

myList.push_back(a);
MyStruct* listA = &myList.back();

myList.push_back(b);
MyStruct* listB = &myList.back();

&a и listA - одно и то же? Будет ли a.myStruct по-прежнему работать как указатель на b? Будет ли a.myStruct работать как указатель на b внутри списка?

Создает ли добавление объекта в список копию объекта или сохраняет исходный объект в памяти и просто использует ссылку на него ?

Насколько я понимаю, список реализован как двусвязный список, поэтому ему не нужно копировать или перемещать исходный объект, но я не уверен, так ли это на самом деле.

1 Ответ

0 голосов
/ 19 июня 2020

Перемещает ли объект в списке его местоположение в памяти?

Нет, он создает новый объект (копию) в другом месте в памяти.

Все стандартные контейнеры «владеют» своими элементами, и они делают это, копируя вещи, которые вы им даете (или перемещая их, если применимо).

Являются ли a и listA одинаковыми?

Нет.

Будет ли a->myStruct по-прежнему работать как указатель на b?

Да. Это не изменилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...