Я использую Visual Leak Detector для обнаружения утечек памяти, и столкнулся с множеством случаев утечек памяти в линиях, такие как:Как std :: map operator [] вызывает утечку памяти с фундаментальными типами данных?
class SomeClass
{
// ...
std::map<long,long> some_map;
void func(long a_long, long b_long)
{
some_map[a_long] = b_long; // here be a memory leak
}
}
Как это возможно? здесь нет указателей, нет экземпляра объекта.
Может быть, это утечка памяти, которая является побочным эффектом от сбоя программы из-за чего-то еще? Повреждена ли программа или вышла (1), чтобы карта не была полностью разрушена?
Вы должны ответить на ответ Питера. – Omnifarious
Выключить (1) команду вызвать такое ненормальное завершение? – Jonathan
@ Джонатан. Согласно разделу 18.3.8 спецификации «Автоматические объекты не уничтожаются в результате вызова' exit() '." Так что да, вызов 'exit' предотвратит запуск деструктора. – templatetypedef