С++ Список объектов - это только копии

Мне нужно вести два списка объектов по соображениям производительности (скорость по сравнению с памятью).

Я использую указатели объектов, такие как

std::list<MyClass*> m_list1;
std::list<MyClass*> m_list2;

Я добавляю объекты в список,

MyClass* myObject = new MyClass();
m_list1.push_back(myObject);
m_list2.push_back(myObject);

Проблема, с которой я столкнулся, заключается в том, что изменения, которые я вношу в m_list1, не влияют на m_list2, поэтому очевидно, что это копии, а не реальная сделка.

Как правильно хранить их, чтобы они не были копиями? Не использовать указатели нельзя, поскольку все они будут размещены в куче.


person Josh Brittain    schedule 07.07.2012    source источник
comment
изменения, которые я вношу в m_list1, не влияют на m_list2 Вы хотите сказать, что вы удаляете/вставляете элемент в m_list1, но m_list2 не имеет обновления? Этого следовало ожидать. Что касается самих указателей, то они указывают на один и тот же объект кучи, поэтому изменения в экземпляре в одном списке будут отражены в другом. Не могли бы вы прояснить свое замешательство?   -  person chrisaycock    schedule 07.07.2012
comment
Взгляните на std::shared_ptr и убедитесь, что это не соответствует вашим целям.   -  person Benjamin Lindley    schedule 07.07.2012


Ответы (1)


Контейнеры Std копируют переданные значения, но, поскольку вы передали указатели, копируются именно указатели. Поэтому они по-прежнему указывают на один и тот же объект. Проблема должна быть где-то в другом. Возможно, вы могли бы опубликовать конкретный код, который, по вашему мнению, демонстрирует такое поведение?

person Antimony    schedule 07.07.2012
comment
После вашего сообщения я дважды проверил свой код и забыл, что удаляю и добавляю новый объект в один из списков, что испортит два списка. Глупая ошибка ›_› - person Josh Brittain; 07.07.2012