Редактировать: Пример кода при создании списка объектов с использованием std :: list.
class MyClass {
public:
std::list<Coordi> m_listCoordi;
}
//---creation of list of objects
for(int a = 0; a < numObjects; a++){
m_listCoordi.push_back(Coordi()); //note: no 'new' is used.
}
//---destroying list of objects
m_listCoordi.clear();
Пример кода при создании списка указателей на объекты с использованием std :: list.
class MyClass {
public:
std::list<Coordi*> m_listCoordi; //<---note: now list of pointer
}
//---creation of list of objects
for(int a = 0; a < numObjects; a++){
m_listCoordi.push_back(new Coordi());
}
//---destroying list of objects
for(int a = 0; a < numObjects; a++){
delete m_listCoordi[a]; //note: an item in m_listCoordi is already a pointer.
}
m_listCoordi.clear();
Я извинился за грязный ответ.У меня не так много времени, чтобы сделать его более чистым и формальным.Надеюсь, в любом случае это поможет.
Предыдущий ответ:
Если в вашем списке, скажем, std::vector<YourClass*>
, элементы содержат значения указателя.Вы несете ответственность за выделение и освобождение блока памяти из значений указателя, которые вы сохраняете в списке.Каким бы ни был ваш метод распределения / освобождения, решать вам.Просто убедитесь, что ваш код не вызовет утечек памяти.
//---deallocate all elements before clearing the list.
for(auto& pItem : LstOfMyClass){
//note: since LstOfMyClass is a list of pointer values, pItem is a pointer variable.
delete pItem;
}
//---clear the list.
LstOfMyClass.clear();
Если объекты в LstOfMyClass
не перемещаются или список не увеличивается или не уменьшается, лучше использовать список объектов вместо спискауказатель на объекты.При этом вам не нужно беспокоиться о распределении и освобождении.Список сделает это за вас, если переменная списка уничтожена.