@@ -8263,29 +8263,23 @@ bool OGRLayer::WriteArrowBatch(const struct ArrowSchema *schema,
82638263 }
82648264 }
82658265
8266- OGRFeatureDefn oLayerDefnTmp (poLayerDefn->GetName ());
8267-
8268- struct LayerDefnTmpRefReleaser
8266+ struct FeatureDefnReleaser
82698267 {
8270- OGRFeatureDefn &m_oDefn;
8271-
8272- explicit LayerDefnTmpRefReleaser (OGRFeatureDefn &oDefn) : m_oDefn(oDefn)
8273- {
8274- m_oDefn.Reference ();
8275- }
8276-
8277- ~LayerDefnTmpRefReleaser ()
8268+ void operator ()(OGRFeatureDefn *poFDefn)
82788269 {
8279- m_oDefn.Dereference ();
8270+ if (poFDefn)
8271+ poFDefn->Release ();
82808272 }
82818273 };
82828274
8283- LayerDefnTmpRefReleaser oLayerDefnTmpRefReleaser (oLayerDefnTmp);
8275+ std::unique_ptr<OGRFeatureDefn, FeatureDefnReleaser> poLayerDefnTmp (
8276+ std::make_unique<OGRFeatureDefn>(poLayerDefn->GetName ()).release ());
8277+ poLayerDefnTmp->Reference ();
82848278
82858279 std::vector<int > anIdentityFieldMap;
82868280 if (bFallbackTypesUsed)
82878281 {
8288- oLayerDefnTmp. SetGeomType (wkbNone);
8282+ poLayerDefnTmp-> SetGeomType (wkbNone);
82898283 for (int i = 0 ; i < poLayerDefn->GetFieldCount (); ++i)
82908284 {
82918285 anIdentityFieldMap.push_back (i);
@@ -8299,11 +8293,11 @@ bool OGRLayer::WriteArrowBatch(const struct ArrowSchema *schema,
82998293 if (oIter != oMapOGRFieldIndexToFieldInfoIndex.end ())
83008294 asFieldInfo[oIter->second ].eSetFeatureFieldType =
83018295 asFieldInfo[oIter->second ].eNominalFieldType ;
8302- oLayerDefnTmp. AddFieldDefn (&oFieldDefn);
8296+ poLayerDefnTmp-> AddFieldDefn (&oFieldDefn);
83038297 }
83048298 for (int i = 0 ; i < poLayerDefn->GetGeomFieldCount (); ++i)
83058299 {
8306- oLayerDefnTmp. AddGeomFieldDefn (poLayerDefn->GetGeomFieldDefn (i));
8300+ poLayerDefnTmp-> AddGeomFieldDefn (poLayerDefn->GetGeomFieldDefn (i));
83078301 }
83088302 }
83098303 else
@@ -8342,7 +8336,8 @@ bool OGRLayer::WriteArrowBatch(const struct ArrowSchema *schema,
83428336 }
83438337 };
83448338
8345- OGRFeature oFeature (bFallbackTypesUsed ? &oLayerDefnTmp : poLayerDefn);
8339+ OGRFeature oFeature (bFallbackTypesUsed ? poLayerDefnTmp.get ()
8340+ : poLayerDefn);
83468341 FeatureCleaner oCleaner (oFeature, abUseStringOptim);
83478342 OGRFeature oFeatureTarget (poLayerDefn);
83488343 OGRFeature *const poFeatureTarget =
@@ -8409,7 +8404,7 @@ bool OGRLayer::WriteArrowBatch(const struct ArrowSchema *schema,
84098404 }
84108405 bool bLossyConversion = false ;
84118406 const auto eSrcType =
8412- oLayerDefnTmp. GetFieldDefnUnsafe (i)->GetType ();
8407+ poLayerDefnTmp-> GetFieldDefnUnsafe (i)->GetType ();
84138408 const auto eDstType =
84148409 poLayerDefn->GetFieldDefnUnsafe (i)->GetType ();
84158410
@@ -8460,7 +8455,7 @@ bool OGRLayer::WriteArrowBatch(const struct ArrowSchema *schema,
84608455 " For feature " CPL_FRMT_GIB
84618456 " , value of field %s cannot not preserved" ,
84628457 oFeatureTarget.GetFID (),
8463- oLayerDefnTmp. GetFieldDefn (i)->GetNameRef ());
8458+ poLayerDefnTmp-> GetFieldDefn (i)->GetNameRef ());
84648459 if (bTransactionOK)
84658460 RollbackTransaction ();
84668461 return false ;
0 commit comments