The default C++ runtime library implementations of the following use malloc() and free() and are thread‑safe with respect to each other, malloc(), and free(). They are not thread‑safe with respect to std::set_new_handler(). You are permitted to replace them:
::operator new(std::size_t)
::operator new[](std::size_t)
::operator new(std::size_t, const std::nothrow_t&)
::operator new[](std::size_t, const std::nothrow_t)
::operator delete(void*)
::operator delete[](void*)
::operator delete(void*, const std::nothrow_t&)
::operator delete[](void*, const std::nothrow_t&)
The following placement forms are also thread‑safe. You are not permitted to replace them:
::operator new(std::size_t, void*)
::operator new[](std::size_t, void*)
::operator delete(void*, void*)
::operator delete[](void*, void*)