v8  10.1.124 (node 18.2.0)
V8 is Google's open source JavaScript engine
prefinalizer.h File Reference
Include dependency graph for prefinalizer.h:

Go to the source code of this file.

Data Structures

class  PrefinalizerRegistration
 

Namespaces

 cppgc
 
 cppgc::internal
 

Macros

#define CPPGC_USING_PRE_FINALIZER(Class, PreFinalizer)
 

Macro Definition Documentation

◆ 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
Definition: trace-trait.h:45
static TraceDescriptor GetTraceDescriptor(const void *self)
Definition: trace-trait.h:74

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> {
CPPGC_USING_PRE_FINALIZER(WithPrefinalizer, Dispose);
public:
void Trace(Visitor*) const {}
void Dispose() { prefinalizer_called = true; }
~WithPrefinalizer() {
// prefinalizer_called == true
}
private:
bool prefinalizer_called = false;
};
#define CPPGC_USING_PRE_FINALIZER(Class, PreFinalizer)
Definition: prefinalizer.h:56

Definition at line 56 of file prefinalizer.h.