Чего следует избегать при написании кода, защищающего от утечки памяти, с использованием STL? - PullRequest
5 голосов
/ 18 февраля 2011

Я уже довольно давно использую STL, но в основном для реализации алгоритмов ради него, за исключением случайного вектора в другом коде.

Прежде чем я начну использовать его больше, я хотелзнать, какие распространенные ошибки люди делают при использовании STL - в частности, есть ли какие-то вещи, на которые я должен обратить внимание при использовании шаблонов STL, чтобы защитить мой код от утечек памяти?

Ответы [ 3 ]

13 голосов
/ 18 февраля 2011

Существует множество узких мест в эффективном использовании STL, если вы хотите узнать больше, я бы предложил книгу "Эффективный STL" С.Мейерса .

9 голосов
/ 18 февраля 2011

Когда вы храните необработанные указатели для динамически размещаемых объектов в контейнерах, контейнеры не будут управлять своей памятью.

vector<FooBar*> vec;
vec.push_back(new FooBar); //your responsibility to free them

Чтобы сделать его более защищенным от утечек памяти, используйте контейнеры со смарт-указателями или контейнеры со специальными указателями, как в Boost: контейнеры для указателей

Особенно с учетом того, что в случае возникновения исключения выполнение может не достигнуть кода ручной очистки (если не будут предприняты болезненные усилия).

6 голосов
/ 18 февраля 2011

в частности, есть ли какие-то вещи, на которые я должен обратить внимание при использовании шаблонов STL, чтобы защитить мой код от утечек памяти?

STL или нет, ответ тот же:

...