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;
}
В этом коде delete w
не вызывает перегруженный delete
оператора, когда деструктор есть. Если деструктор опущен, вызывается перегруженный delete
. Почему это так?удалить указатель NULL не вызывает перегружен удаления при деструкторе написано
Выход при ~ виджет() записывается
Оператор новый
Из памяти
Выход при ~ виджет() не написано
оператор новый
Из памяти
оператор удаления
Это странно увлекательный вопрос! Я просто посмотрел в «Эффективный C++» Скотта Мейера (к сожалению, у меня есть только 2-й редактор), и я ничего не мог с этим поделать. –