class bad_alloc : public exception { /* ... */ };
struct nothrow_t {};
extern const nothrow_t nothrow; // indicator for allocation that doesn't throw exceptions
typedef void (*new_handler)();
new_handler set_new_handler(new_handler new_p) throw();
void* operator new(size_t) throw(bad_alloc); // throws bad_alloc
void operator delete(void*) throw();
void* operator new(size_t, const nothrow_t&) throw(); // nothrow
void operator delete(void*, const nothrow_t&) throw();
void* operator new[](size_t) throw(bad_alloc);
void operator delete[](void*) throw();
void* operator new[](size_t, const nothrow_t&) throw();
void operator delete[](void*, const nothrow_t&) throw();
void* operator new (size_t, void* p) throw() { return p; } // placement
void operator delete (void* p, void*) throw() { }
void* operator new[](size_t, void* p) throw() { return p; }
void operator delete[](void* p, void*) throw() { }
void f()
{
int* p = new int[100000]; // may throw bad_alloc
if (int* q = new(nothrow) int[100000]) { // will not throw exception
// allocation succeeded
}
else {
// allocation failed
}
}
void* malloc(size_t s); // allocate s bytes
void* calloc(size_t n, size_t s); // allocate n times s bytes initialized to 0
void free(void* p); // free space allocated by malloc() or calloc()
void* realloc(void* p, size_t s); // change the size of the array pointed to by p to s;
// if that cannot be done, allocate s bytes, copy
// the array pointed to by p to it, and free p
void* memcpy(void* p, const void* q, size_t n); // copy non-overlapping areas
void* memmove(void* p, const void* q, size_t n); // copy potentially overlapping areas
void* memchr(const void* p, int b, size_t n); // like strchr() (_string.c_): find b in p[0]..p[n-1]
int memcmp(const void* p, const void* q, size_t n); // like strcmp(): compare byte sequences
void* memset(void* p, int b, size_t n); // set n bytes to b, return p