Деструктор - это просто функция, которая вызывается автоматически, когда экземпляр выходит из области видимости.Это удобный способ выпустить динамически выделенную память.
Вам не нужно беспокоиться о выпуске переменных, которые были выделены в стеке (все, что было объявлено, а не новое -ed).
Например:
int localStackVar = 5; //no need to deallocate explicitly
int* localPointer = &localStackVar // no need to deallocate explicitly
int* heapValue = new int(); //Allocates to the heap so you need to call delete explicitly
Первые два из примера выше в стеке, то первый один является ИНТ и второй является ИНТ указатель, который является просто способ сказать, что это переменная который содержит адрес памяти другой переменной. Обе из них будут освобождены автоматически, так как вы не назовете на них new
.
Третья строка выделяет int в куче. Вы должны позвонить по номеру delete
, когда он вам больше не нужен.
Если эти 3 переменные были частью класса, ваш конструктор и деструктор будет выглядеть следующим образом:
MyClass::MyClass()
{
heapValue = new int();
}
MyClass::~MyClass() //destructor
{
delete heapValue;
}
void someFun()
{
MyClass instance; //constructor is called here
//do stuff
return; //destructor is called here
}
Таким образом, хотя MyClass instance
является локальной переменной стека, когда объявленный в someFun
, поскольку конструктор вызывается автоматически , heapVal указывается на ячейку памяти, находящуюся в куче, которая должна быть явно выпущена.
Если ваш деструктор не вызвал удаление на нем, память «утешилась», она не будет выпущена до тех пор, пока ваша программа не завершится.
Не делайте того, чтобы вы не использовали символы подчеркивания для имен в вашем коде. Есть определенные случаи, когда они зарезервированы для реализации, поэтому лучше всего полностью избегать ситуации. – NathanOliver
Что такое '_a'? И что заставляет вас верить, что это было создано на куче? – UnholySheep
Также почему вы думаете, что вам нужно будет вызвать деструктор для 'int' (или любого другого« нормального »типа данных) и что сделает этот деструктор? – UnholySheep