![]() |
MySQL 9.5.0
Source Code Documentation
|
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical reasons). More...
#include <string.h>#include <memory>#include <new>#include <type_traits>#include <utility>#include "memory_debugging.h"#include "my_compiler.h"#include "my_dbug.h"#include "my_inttypes.h"#include "my_pointer_arithmetic.h"#include "mysql/psi/psi_memory.h"Go to the source code of this file.
Classes | |
| struct | MEM_ROOT |
| The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks. More... | |
| struct | MEM_ROOT::Block |
| class | Destroy_only< T > |
Typedefs | |
| template<class T > | |
| using | unique_ptr_destroy_only = std::unique_ptr< T, Destroy_only< T > > |
| std::unique_ptr, but only destroying. More... | |
Functions | |
| 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).
| using unique_ptr_destroy_only = std::unique_ptr<T, Destroy_only<T> > |
std::unique_ptr, but only destroying.
| unique_ptr_destroy_only< T > make_unique_destroy_only | ( | MEM_ROOT * | mem_root, |
| Args &&... | args | ||
| ) |
|
inlinenoexcept |
|
inlinenoexcept |
|
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().
|
inlinenoexcept |
| void sql_alloc_error_handler | ( | ) |