Возможный дубликат:
Почему вызывает ли использование «нового» утечки памяти?
Я новичок в STL, и я читал, что хорошей практикой обычно является сохранение векторов объектов, а не векторов указателей на объекты. В попытке соответствовать этому кредо я столкнулся со следующим сценарием:
//Approach A
//dynamically allocates mem for DD_DungeonRoom object, returns a pointer to the block.
//then, presumably, copy-constructs the de-referenced DD_DungeonRoom as a
//disparate DD_DungeonRoom object to be stored at the tail of the vector
//Probably causes memory leak due to the dynamically allocated mem block not being
//caught and explicitly deleted
mvLayoutArray.push_back(*(new DD_DungeonRoom()));
//Approach B
//same as A, but implemented in such a way that the dynamically allocated mem block
//tempRoom can be deleted after it is de-referenced and a disparate DD_DungeonRoom is
//copy-constructed into the vector
//obviously rather wasteful but should produce the vector of object values we want
DD_DungeonRoom* tempRoom = new DD_DungeonRoom();
mvLayoutArray.push_back(*(tempRoom));
delete tempRoom;
первый вопрос: в подходе А возникает утечка памяти?
второй вопрос: если предположить, что А вызывает утечку памяти, решает ли Б ее? третий вопрос: есть ли (или, что более вероятно, «что есть») лучший способ добавить объекты пользовательского класса (например, требующие динамического распределения через «новый» или «malloc») в вектор по значению?
спасибо, CCJ