Previously, almost all classes didn't actually call their destructors, which is non-intuitive for C++ code. Setting them up to be called was somewhat of a pain, since it required defining a helper function.
With the new macros, we can easily encapsulate this complexity, making destructors just happen automatically. Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/glsl/ralloc.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/glsl/ralloc.h b/src/glsl/ralloc.h index 799d3a9..82a3daa 100644 --- a/src/glsl/ralloc.h +++ b/src/glsl/ralloc.h @@ -405,15 +405,23 @@ bool ralloc_vasprintf_append(char **str, const char *fmt, va_list args); #endif #define _RALLOC_OPS(ALLOC, TYPE) \ +private: \ + static void _ralloc_##TYPE##_destructor_callback(void *p) \ + { \ + reinterpret_cast<TYPE *>(p)->~TYPE(); \ + } \ +public: \ static void* operator new(size_t size, void *mem_ctx) \ { \ void *p = ALLOC(mem_ctx, size); \ assert(p != NULL); \ + ralloc_set_destructor(p, _ralloc_##TYPE##_destructor_callback); \ return p; \ } \ \ static void operator delete(void *p) \ { \ + ralloc_set_destructor(p, NULL); \ ralloc_free(p); \ } -- 1.8.3.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev