v8  10.1.124 (node 18.2.0)
V8 is Google's open source JavaScript engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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.