Так вот код:Когда программа не вызывает деструктор в C++?
#include <iostream>
using namespace std;
class C {
public:
C() {i = 6; cout << "A:" << i << endl;}
C(int i0) {i = i0; cout << "B:" << i << endl;}
~C() {cout << "C:" << i << endl;}
private:
int i;
};
int main(int argc, char* argv[]) {
cout << "X" << endl;
C *c = new C;
cout << "Y" << endl;
}
По какой-то причине выход для этого кода
X
A:6
Y
И по какой-то причине деструктора (C: 6) никогда не вызывается, когда вы дойдете до конца код. Почему это? Кроме того, этот код вызывать деструктор:
#include <iostream>
using namespace std;
class C {
public:
C() {i = 0; cout << "A:" << i << endl;}
C(int i0) {i = i0; cout << "B:" << i << endl;}
~C() {cout << "C:" << i << endl;}
private:
int i;
};
int main(int argc, char* argv[]) {
cout << "X" << endl;
C c;
cout << "Y" << endl;
}
Как правило, вы должны называть 'delete' для всего, что вы называете' new' on (примечание: не всегда верно, но будет выполняться в большинстве случаев) –
C++ не является C#, избегать 'new' –
_When do вы не называете деструктора? _ Всегда. :) – erip