This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical reasons).
More...
|
void | sql_alloc_error_handler () |
|
void * | operator new (size_t size, MEM_ROOT *mem_root, const std::nothrow_t &arg=std::nothrow) noexcept |
| Allocate an object of the given type. More...
|
|
void * | operator new[] (size_t size, MEM_ROOT *mem_root, const std::nothrow_t &arg=std::nothrow) noexcept |
|
void | operator delete (void *, MEM_ROOT *, const std::nothrow_t &) noexcept |
|
void | operator delete[] (void *, MEM_ROOT *, const std::nothrow_t &) noexcept |
|
template<class T > |
void | destroy_at (T *ptr) |
|
template<typename T , typename... Args> |
unique_ptr_destroy_only< T > | make_unique_destroy_only (MEM_ROOT *mem_root, Args &&...args) |
|
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical reasons).
void * operator new |
( |
size_t |
size, |
|
|
MEM_ROOT * |
mem_root, |
|
|
const std::nothrow_t & |
arg = std::nothrow |
|
) |
| |
|
inlinenoexcept |
Allocate an object of the given type.
Use like this:
Foo *foo = new (mem_root) Foo();
Note that unlike regular operator new, this will not throw exceptions. However, it can return nullptr if the capacity of the MEM_ROOT has been reached. This is allowed since it is not a replacement for global operator new, and thus isn't used automatically by e.g. standard library containers.
TODO: This syntax is confusing in that it could look like allocating a MEM_ROOT using regular placement new. We should make a less ambiguous syntax, e.g. new (On(mem_root)) Foo().