From 76ab85671d6daef1f3976d3d77e8f39e131869eb Mon Sep 17 00:00:00 2001 From: X512 Date: Fri, 4 Dec 2020 23:17:04 +0900 Subject: [PATCH] AutoDeleter: fix AutoDeleter size C++ don't allow zero size class fields. If field with empty class field is used, it's size will be 1 byte. Create DeleteFunc instance as local variable at each use instead. Fixes #16638. Change-Id: Ifb76c45ea02e9fed014751542ee5f16f41e11d15 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3458 Reviewed-by: Adrien Destugues --- headers/private/shared/AutoDeleter.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/headers/private/shared/AutoDeleter.h b/headers/private/shared/AutoDeleter.h index 429443b029..d4f7d98d64 100644 --- a/headers/private/shared/AutoDeleter.h +++ b/headers/private/shared/AutoDeleter.h @@ -39,13 +39,15 @@ public: inline ~AutoDeleter() { - fDelete(fObject); + DeleteFunc destructor; + destructor(fObject); } inline void SetTo(C *object) { if (object != fObject) { - fDelete(fObject); + DeleteFunc destructor; + destructor(fObject); fObject = object; } } @@ -79,7 +81,6 @@ public: protected: C *fObject; - DeleteFunc fDelete; private: AutoDeleter(const AutoDeleter&);