| // operator new(unsigned) |
| // operator new[](unsigned) |
| // operator new(unsigned, std::nothrow_t const&) |
| // operator new[](unsigned, std::nothrow_t const&) |
| |
| #include <stdlib.h> |
| |
| #include <new> |
| |
| using std::nothrow_t; |
| |
| // A big structure. Its details don't matter. |
| typedef struct { |
| int array[1000]; |
| } s; |
| |
| __attribute__((noinline)) void* operator new (std::size_t n) throw (std::bad_alloc) |
| { |
| return malloc(n); |
| } |
| |
| __attribute__((noinline)) void* operator new (std::size_t n, std::nothrow_t const &) throw () |
| { |
| return malloc(n); |
| } |
| |
| __attribute__((noinline)) void* operator new[] (std::size_t n) throw (std::bad_alloc) |
| { |
| return malloc(n); |
| } |
| |
| __attribute__((noinline)) void* operator new[] (std::size_t n, std::nothrow_t const &) throw () |
| { |
| return malloc(n); |
| } |
| |
| __attribute__((noinline)) void operator delete (void* p) |
| { |
| return free(p); |
| } |
| |
| __attribute__((noinline)) void operator delete[] (void* p) |
| { |
| return free(p); |
| } |
| |
| int main(void) |
| { |
| s* p1 = new s; |
| s* p2 = new (std::nothrow) s; |
| char* c1 = new char[2000]; |
| char* c2 = new (std::nothrow) char[2000]; |
| delete p1; |
| delete p2; |
| delete [] c1; |
| delete [] c2; |
| return 0; |
| } |
| |
| |