} /* end of extern "C" */
#endif
+#define _RALLOC_OPS(ALLOC, TYPE) \
+ static void* operator new(size_t size, void *mem_ctx) \
+ { \
+ void *p = ALLOC(mem_ctx, size); \
+ assert(p != NULL); \
+ return p; \
+ } \
+ \
+ static void operator delete(void *p) \
+ { \
+ ralloc_free(p); \
+ }
+
+/**
+ * Declare C++ new and delete operators which use ralloc.
+ *
+ * Placing one of these macros in the body of a class makes it possible to do:
+ *
+ * TYPE *var = new(mem_ctx) TYPE(...);
+ * delete var;
+ *
+ * which is more idiomatic in C++ than calling ralloc or rzalloc.
+ */
+#define DECLARE_RALLOC_CXX_OPERATORS(TYPE) _RALLOC_OPS(ralloc_size, TYPE)
+#define DECLARE_RZALLOC_CXX_OPERATORS(TYPE) _RALLOC_OPS(rzalloc_size, TYPE)
+
#endif