Поскольку вы выделили память для объекта dynamically
(с помощью new
оператора в программе), вы должны освободить его с помощью delete
оператора. Не делая этого, вы создаете memory leaks
. Это означает, что вам нужно отслеживать выделенную вами память и освобождать ее, когда она вам больше не нужна. Вы можете прочитать о memory leaks over here.
Однако, для объектов automatic
, destructor
будет называться неявно, когда объект выходит за пределы области действия. Например,
int main()
{
foo temp;
// Do Something Interesting
return 0;
}
Выход выше программы покажет вам Destructor
называют.
Кроме того, есть и другие проблемы с вашей программой. Во-первых, вы не объявили конструктора и деструкторов для вашего класса foo
под номером Public
. А во-вторых, вы забыли пару круглых скобок с Destructor ~foo
. Компилятор будет вызывать ошибку, если вы попытаетесь скомпилировать свою программу. Правильная программа приведена ниже:
#include <iostream>
using namespace std;
class foo {
public:
foo() {
cout<<"This is constructor!"<<endl;
}
~foo() {
cout<<"This is destructor! "<<endl;
}
};
int main() {
foo* temp;
temp = new foo();
/*some code*/
delete temp;
return 0;
}
Потому что у вас есть утечка памяти. – juanchopanza
Я бы предложил взглянуть на некоторые из этих книг (http://stackoverflow.com/q/388242/2069064). – Barry
Вы всегда можете заставить его сделать «удаление темпа» перед выходом; – infixed