class Widget
{
public:
Widget() {
cout<<"~Widget()"<<endl;
}
~Widget() {
cout<<"~Widget()"<<endl;
}
void* operator new(size_t sz) throw(bad_alloc) {
cout<<"operator new"<<endl;
throw bad_alloc();
}
void operator delete(void *v) {
cout<<"operator delete"<<endl;
}
};
int main()
{
Widget* w = 0;
try {
w = new Widget();
}
catch(bad_alloc) {
cout<<"Out of Memory"<<endl;
}
delete w;
getch();
return 1;
}
In questo codice, delete w
non chiama il sovraccarico delete
operatore quando il distruttore è lì. Se il distruttore viene omesso, viene chiamato l'overload delete
. Perché è così?eliminare un puntatore NULL non chiamare sovraccaricato elimina quando distruttore è scritto
uscita quando ~ Widget() è scritto
operatore nuovo
Memoria
uscita quando ~ Widget() non è scritto
operatore new
Memoria
operatore eliminare
Questa è una domanda stranamente affascinante! Ho appena guardato in Effective C++ di Scott Meyer (sfortunatamente ho solo 2 ° Ed) e non ho visto nulla al riguardo. –