Go to the source code of this file.
◆ CPPGC_USING_PRE_FINALIZER
#define CPPGC_USING_PRE_FINALIZER |
( |
|
Class, |
|
|
|
PreFinalizer |
|
) |
| |
Value: public: \
static void InvokePreFinalizer(void* object) { \
static_assert(cppgc::IsGarbageCollectedOrMixinTypeV<Class>, \
"Only garbage collected objects can have prefinalizers"); \
Class* self = static_cast<Class*>(object); \
self->PreFinalizer(); \
} \
\
private: \
CPPGC_NO_UNIQUE_ADDRESS cppgc::internal::PrefinalizerRegistration \
prefinalizer_dummy_{
this,
\
Class::InvokePreFinalizer}; \
static_assert(true, "Force semicolon.")
const void * base_object_payload
static TraceDescriptor GetTraceDescriptor(const void *self)
Macro must be used in the private section of Class
and registers a prefinalization callback void Class::PreFinalizer()
. The callback is invoked on garbage collection after the collector has found an object to be dead.
Callback properties:
- The callback is invoked before a possible destructor for the corresponding object.
- The callback may access the whole object graph, irrespective of whether objects are considered dead or alive.
- The callback is invoked on the same thread as the object was created on.
Example:
class WithPrefinalizer : public GarbageCollected<WithPrefinalizer> {
public:
void Trace(Visitor*) const {}
void Dispose() { prefinalizer_called = true; }
~WithPrefinalizer() {
}
private:
bool prefinalizer_called = false;
};
#define CPPGC_USING_PRE_FINALIZER(Class, PreFinalizer)
Definition at line 56 of file prefinalizer.h.