Я пытаюсь создать по существу два вектора объектов, где некоторые объекты вводятся в оба списка, а некоторые просто вводятся в один. Первая проблема, которую я обнаружил, заключалась в том, что когда я использовал push_back(), чтобы добавить объект в оба списка, объект был скопирован так, что когда я изменил его из одного списка, объект не изменился в другом. Чтобы обойти это, я попытался создать список указателей на объекты как один из списков. Однако, когда я обратился к указателю позже, данные, казалось, были повреждены, значения элементов данных были неправильными. Вот некоторые фрагменты моего кода:C++ vector указателей объектов класса
Определение векторов:
vector<AbsorbMesh> meshList;
vector<AbsorbMesh*> absorbList;
... Добавление объекта как:
AbsorbMesh nurbsMesh = nurbs.CreateMesh(uStride, vStride);
// Add to the absorption list
absorbList.push_back(&nurbsMesh);
// Store the mesh in the scene list
meshList.push_back(nurbsMesh);
Доступ к объекту:
if (absorbList.size() > 0)
{
float receivedPower = absorbList[0]->receivedPower;
}
Что я делаю неправильно?
Почему meshlist хранит * копию * реальных объектов? Если вы хотите сохранить тот же объект в обоих векторах, то оба должны быть указателями – Naveen
Какова ваша фактическая цель здесь (кроме 2 полуподобных списков)? Хранение указателей в контейнерах STL обычно приводит к плохим вещам. –
@Adam Почему? Только потому, что указатели не могут быть освобождены? На мой взгляд, хорошо хранить указатели (или интеллектуальные указатели) внутри контейнеров STL, так как таким образом вы не платите за создание копии объектов при изменении размера контейнера. –