Core: Isolate Ref forward declare logic

This commit is contained in:
Thaddeus Crews 2025-01-09 10:02:27 -06:00
parent 2303ce843a
commit d9ef361d12
No known key found for this signature in database
GPG key ID: 62181B86FE9E5D84
2 changed files with 9 additions and 5 deletions

View file

@ -180,10 +180,15 @@ public:
// do a lot of referencing on references and stuff
// mutexes will avoid more crashes?
if (reference && reference->unreference()) {
memdelete(reference);
if (reference) {
// NOTE: `reinterpret_cast` is "safe" here because we know `T` has simple linear
// inheritance to `RefCounted`. This guarantees that `T * == `RefCounted *`, which
// allows us to declare `Ref<T>` with forward declared `T` types.
if (reinterpret_cast<RefCounted *>(reference)->unreference()) {
memdelete(reinterpret_cast<RefCounted *>(reference));
}
reference = nullptr;
}
reference = nullptr;
}
template <typename... VarArgs>