Fix memdelete()
of Object
using pointer to secondary parent class
#88688
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #88613
There is a pattern used in a very small number of places in Godot, in order to simulate "interfaces" (which C++ doesn't directly support).
Here's how it works:
Object
(or some other ancestor ofObject
) as the first parent class, and then extend the abstract class as a secondary parent classThis is used by a couple of classes in the OpenXR module:
OpenXRExtensionWrapper
OpenXRGraphicsExtensionWrapper
(which extends the previous one)OpenXRCompositionLayerProvider
This all works fine, except when you keep a reference to one of these types and then later try to
memdelete()
it, which is done in the case ofOpenXRExtensionWrapper
and is the source of the bug from issue #88613This PR allows developers to mark one of these interface classes using a new
IS_POSSIBLE_GDCLASS()
macro, that will tellmemdelete()
to do some additional work that will clean everything up correctly.Given how uncommon this pattern is in Godot, I could understand not wanting to accept this general change to
memdelete()
and instead have the OpenXR implement its own bespoke solution. However, I thought I would propose it and see what folks thought :-)