Не используйте new и удаляйте ничего.
Иногда вам нужно, но обычно это не так, поэтому старайтесь избегать этого и посмотрите, как вы справляетесь. Трудно объяснить, как именно без более конкретного примера, но, в частности, если вы делаете:
SomeType *myobject = new SomeType();
... use myobject for something ...
delete myobject;
return;
Тогда, во-первых, этот код подвержен утечкам, а во-вторых, его следует заменить на:
SomeType myobject;
... use myobject for something (replacing -> with . etc.) ...
return;
Особенно не создавайте вектор с новым - это почти всегда неправильно, потому что на практике вектор почти всегда имеет одного четко определенного владельца. У этого владельца должна быть переменная vector , а не указатель на вектор, который он должен запомнить, чтобы удалить. Вы не будете динамически выделять int
просто как счетчик циклов, и вы не будете динамически выделять вектор только для хранения некоторых значений. В C ++ все типы могут вести себя во многом как встроенные типы. Проблема заключается в том, какой срок службы вы хотите, чтобы они имели, и (иногда), стоит ли передавать их по значению или иным образом копировать.
разве это не должно быть больше похоже на вектор , чтобы их можно было динамически создавать?
Только если их нужно динамически создавать по какой-то другой причине, кроме того, что вы хотите организовать их в векторе. Пока вы не дойдете до этой причины, не ищите ее.
В таком случае, как мне вернуть объект из метода и как избежать утечек памяти (пытаясь использовать только STL)?
Стандартные библиотеки не предоставляют инструментов для предотвращения утечек памяти во всех распространенных случаях. Если вам нужно управлять памятью, я обещаю вам, что для реализации shared_ptr
потребуется меньше усилий, чем для правильной реализации без нее.