Ресурсы, полученные через new
, должны быть освобождены с использованием delete
, а с new[]
должно быть с delete[]
.Так просто, чтобы избежать утечек памяти.Может быть более полезным, если вы разместите более конкретный код.
Деструктор носит то же имя класса, за исключением того, что перед ним стоит символ ~
.
cmysqldb :: ~cmysqldb()
{
// deallocate the resources with the above mentioned rule
}
class foo
{
int var ;
int *ptr ;
public:
foo()
{
ptr = new int ;
}
~foo()
{
delete ptr ;
}
};
void bar()
{
foo obj ;
// .....
} // <-- obj goes out of scope and it's destructor is called at this point.
foo
класс имеет две переменные-члены var, ptr
типа int, int*
соответственно.Таким образом, байты, необходимые для хранения целого числа в var
, и указатель (ptr
), который может указывать на адрес целого числа, распределяется автоматически.Эти ресурсы не выделены нами.Таким образом, мы не обязаны освобождать эти ресурсы.Все идет нормально.
ptr = new int ;
new int
получает ресурсы из бесплатного хранилища, в котором может храниться int
, и возвращается его адрес, который хранится ptr
.Теперь это приобретение ресурса из бесплатного хранилища происходит из-за операции new
, определенной пользователем.Таким образом, задача пользователя - вернуть ресурсы обратно в бесплатный магазин.Итак, утверждение в деструкторе -
delete ptr ;
Получите книгу из Руководства и списка книг по С ++ Definitive C ++ , которые могут даже объяснить лучше.Также следуйте советам @Michael по использованию умных указателей, которые автоматически управляют ресурсами.