Go to the source code of this file.
◆ CPPGC_USING_PRE_FINALIZER
#define CPPGC_USING_PRE_FINALIZER |
( |
|
Class, |
|
|
|
PreFinalizer |
|
) |
| |
Value: public: \
void* object) { \
static_assert(cppgc::IsGarbageCollectedOrMixinTypeV<Class>, \
"Only garbage collected objects can have prefinalizers"); \
Class* self = static_cast<Class*>(object); \
self->PreFinalizer(); \
return true; \
} \
\
private: \
prefinalizer_dummy_{this, Class::InvokePreFinalizer}; \
static_assert(true, "Force semicolon.")
Definition: liveness-broker.h:44
bool IsHeapObjectAlive(const T *object) const
Definition: liveness-broker.h:47
#define CPPGC_NO_UNIQUE_ADDRESS
Definition: compiler-specific.h:35
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: prefinalizer.h:56