Я очень осторожно отношусь к утечкам памяти, поэтому мне показалось, что я проверил бы это. В следующем примере может произойти утечка памяти? Мой инстинкт кишки говорит «да».Утечка памяти в этой ситуации? Использование нового ключевого слова снова и снова
class Handler // Class definition
{public:
~Handler();
int* ptrToInts;
};
Handler::~Handler() // Class destructor
{
delete[] ptrToInts;
}
Handler handler; // Global object
void aFunction()
{
handler.ptrToInts = new int[20];
}
int main()
{
bool quit = false;
while(!quit)
{
aFunction();
}
return 0;
}
Будет ли ptrToInts создавать 20 отдельных новых ints в отдельной памяти на время heapeach?
Кроме того, еще один вопрос: если бы не деструктор, освободилась бы динамически выделенная память? Видя, как будто продолжительность жизни в классе - это продолжительность программы, будет ли она очищать всю «новую» память?
Редактировать: Спасибо за ответы. Причина, по которой я прошу об этом, заключается в том, что я пытаюсь обойти вызов new и delete каждый раз, когда WndProc вызывается для Raw Input в основном, а именно, как MSDN говорит вам об этом. Кажется очень неэффективным.
Если вы 'new' более чем один раз и' удалить [] 'только один раз, то да, у вас есть утечка памяти. Они должны быть сбалансированы. –
Используйте инструменты (например, http://valgrind.org/), которые расскажут вам, если (и где) ваша программа имеет утечки памяти. – simpel01
valgrind не работает на платформах MS Windows. – cwschmidt