Код, вызывающий утечку одного блока, выглядит следующим образом:
in = new RandomAccessFile(fileName, "r");
in->close();
Mem::delObject(in);
где RandomAccessFile
- это класс с полем string
, а delObject()
- статический метод следующим образом:
void Mem::delObject(Object* object) {
delete object;
}
Блок с утечкой - это блок string
.
Если заменить метод delObject
на прямой delete
:
in = new RandomAccessFile(fileName, "r");
in->close();
delete(in);
утечка исчезла. Если метод не заменен, а удален:
in = new RandomAccessFile(fileName, "r");
in->close();
// Mem::delObject(in);
// delete(in);
есть два протекающих блока. Я предполагаю поле и объект, который его содержал.
Итак: почему эти два способа удаления объекта ведут себя по-разному?