CItem* Func()
{
for(int i=0;i<10;i++)
{
CItem* current_item = new CItem();
// не буду вдаваться в подробности, здесь
// создается связанный список
ItemContainer.push_back(*current);
}
}
Значит ли это, что после того как я запихиваю созданный динамически элемент методом push_back в вектор, после завершения работы функции у меня две одинаковые копии данных в памяти? Надо ли удалять сами элементы, или вектор — и мои указатели — это одни и те-же участки памяти?
Все имена функций и классов изменены, любое совпадение является случайным.
Встречный вопрос: а стоит ли инстанцировать вектор типом CItem, если используется динамическое создание элементов? К тому же, если в CItem есть элементы CItem* (судя по тому, что создаётся связанный список), то они будут указывать на элементы не в векторе а на "твои элементы".
Здравствуйте, Logic Bomb, Вы писали:
LB>То-есть получается что использованеи вектора в данном случае — излишество?
Отчего же излишиство???
Излишество, в приведенном Вами примере — это динамическое распределение CItem с последующей передачей созданного экземпляра, по значению в функцию push_back() вектора.
typedef std::vector <CItem*> ItemVector;
тогда
for(int i=0;i<10;i++)
{
CItem* current_item = new CItem();
// не буду вдаваться в подробности, здесь
// создается связанный список
ItemContainer.push_back(current);
}
Вектор хранит указатель на динамически распределенный Вами экземпляр, и при удалении элементов из контейнера надо не забывать освобождать память под них распределенную.
LB>Для чего же он тогда полезен?
Контейнеры STL — являются типобезопасными динамическими контейнерами.
Это и является полезным. Но это в кратце, подробности в книгах, которые были порекомендованы в ответах на вопросы типа "Порекомендуйте книгу по СТЛ", на этом форуме.