From 2505641557b6020f289d098945230e65b0f41141 Mon Sep 17 00:00:00 2001 From: Nirav Atre Date: Mon, 9 Jul 2018 11:49:03 -0700 Subject: HIDL templated destructor This change implements a simple template function to explicitly destruct objects in HIDL. This is particularly useful in the context of HIDL safe unions, where non-primitive objects are constructed using the placement new operator. Bug: n/a Test: Ran make Change-Id: Iceb7d311732f7ea67e132a32ab7410b78ce371c2 --- base/include/hidl/HidlInternal.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/base/include/hidl/HidlInternal.h b/base/include/hidl/HidlInternal.h index 5a08bc3..d000a87 100644 --- a/base/include/hidl/HidlInternal.h +++ b/base/include/hidl/HidlInternal.h @@ -48,6 +48,15 @@ void logAlwaysFatal(const char *message); // If "ro.vndk.version" is not set or set to "current", it returns empty string. std::string getVndkVersionStr(); +// Explicitly invokes the parameterized element's destructor; +// intended to be used alongside the placement new operator. +template +void destructElement(T* element) { + if (element != nullptr) { + element->~T(); + } +} + // HIDL client/server code should *NOT* use this class. // // hidl_pointer wraps a pointer without taking ownership, -- cgit v1.2.3