#include <iostream>
#include <memory>
#include <cstdlib>
#include <stdexcept>
int news = 0;
int deletes = 0;
void* operator new ( std::size_t count ){
news++;
void* p = malloc(count);
if(nullptr == p){
throw std::bad_alloc();
}
return p;
}
void operator delete ( void* ptr ){
deletes ++;
if(ptr != nullptr)
free(ptr);
}
class Bomb{
public:
~Bomb(){
throw std::runtime_error("Thrown in destructor");
}
};
int main(){
try{
delete (new Bomb());
}catch(...){
std::cout<<"Caught exception"<<std::endl;
}
int n = news;
int d = deletes;
std::cout<<"News: " <<n<<" Deletes: "<<d<<std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KCmludCBuZXdzID0gMDsKaW50IGRlbGV0ZXMgPSAwOwoKdm9pZCogb3BlcmF0b3IgbmV3ICAoIHN0ZDo6c2l6ZV90IGNvdW50ICl7CiAgbmV3cysrOwogIHZvaWQqIHAgPSBtYWxsb2MoY291bnQpOwogIGlmKG51bGxwdHIgPT0gcCl7CiAgICB0aHJvdyBzdGQ6OmJhZF9hbGxvYygpOwogIH0KICByZXR1cm4gcDsKfQoKdm9pZCBvcGVyYXRvciBkZWxldGUgICggdm9pZCogcHRyICl7CiAgZGVsZXRlcyArKzsKICBpZihwdHIgIT0gbnVsbHB0cikKICAgIGZyZWUocHRyKTsKfQoKY2xhc3MgQm9tYnsKcHVibGljOgogIH5Cb21iKCl7CiAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIlRocm93biBpbiBkZXN0cnVjdG9yIik7CiAgfQp9OwoKaW50IG1haW4oKXsKCiAgdHJ5ewogICAgZGVsZXRlIChuZXcgQm9tYigpKTsKICB9Y2F0Y2goLi4uKXsKICAgIHN0ZDo6Y291dDw8IkNhdWdodCBleGNlcHRpb24iPDxzdGQ6OmVuZGw7CiAgfQogIGludCBuID0gbmV3czsKICBpbnQgZCA9IGRlbGV0ZXM7CgogIHN0ZDo6Y291dDw8Ik5ld3M6ICIgPDxuPDwiIERlbGV0ZXM6ICI8PGQ8PHN0ZDo6ZW5kbDsKCiAgcmV0dXJuIDA7Cn0K