Это не значит, что утечка
Если мы посмотрим на этот код:
#include <iostream>
#include <vector>
int MyFunction(){
// no leak
static std::vector<int> v;
v.push_back(1);
std::cout << "memory used : " << v.size() * sizeof(int) << std::endl;
}
int main(){
while(true){//Yes infinitive for long run test
MyFunction();
}
}
это даст:
memory used : 40140
memory used : 40144
memory used : 40148
File size limit exceeded
Вектор через некоторое время запросит больше памяти, чем может дать ПК, и программа вылетит.
Так что, если ваш MyFunction
будет вызываться огромное количество раз, ваша программа тоже аварийно завершит работу.
Но это не всегда утечка. Может быть, может быть нет.
В моем коде нет утечки, и вектор будет уничтожен после основного (ну нет, из-за while(1)
, но мы знаем, как очистить память).
Утечка - это память, которую мы больше не можем уничтожить, потому что "потеряли" там, где она есть. Как это:
int MyFunction(){
// leak
new int();
}
Здесь мы не можем позвонить delete
по этому int
, потому что его адрес давно потерян.
Вы можете прочитать абзац о Синтаксическая или семантическая утечки памяти здесь .