On 21/10/2025 19:08, Even Rouault wrote:
Encapsulating the object into a wrapper when returning the object to
a language with automatic GC.
If I don't do this, I will have to keep a reference to the layer or
the feature. Or clone it.
I see different options:
1) we revert that change. Downside: users may believe that they can
modify the OGRFeatureDefn* instance, which can potentially cause
crashes if they are OGRFeature* based on it (that was the rationale
for const'ifying)
2) we make OGRFeatureDefn::Reference() and Dereference() const
methods. But that's a clear violation of const semantics, given that
we have a GetRefCount() and thus the observable state is modified, so
not something I'd be super keen doing
3) the caller of OGRFeature::GetDefnRef() takes responsibility for
const_cast'ing the const pointer to a non-const pointer. For the
purpose of just modifying the ref counter, that's fine.
Ok, if whether its me const_casting or GDAL, this does not change the
basic problem:
Is incrementing the reference counter of a const object an allowed
operation?
What happens if the Dataset or the Layer containing a returned const
SpatialReference that has a positive reference count is destroyed?
Same goes for OGRFeatureDefn and OGRFieldDefn of course, but at the
moment my problem is especially with OGRSpatialReference.
--
Momtchil Momtchev <[email protected]>
_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev