void cvct2gdal::CVCT2GDALLayer( VCTLayer * poVCTLayer, OGRLayer * poOGRLayer ) { OGRFeatureDefn * poOGRFeatDefn = cvct2gdal::CVCT2GDALFeatureDefn ( & (poVCTLayer->featuredefn ) ); for ( int ifield = 0; ifield < poOGRFeatDefn->GetFieldCount(); ++ifield ) { poOGRLayer->CreateField ( poOGRFeatDefn->GetFieldDefn ( ifield ) ); } for (auto ifeat = 0; ifeat != poVCTLayer->GetFeatureCount(); ++ifeat) { VCTFeature * poVCTFeat = poVCTLayer->GetFeatureByIndex(ifeat); //注意:feature在析构时,会将featuredefn也析构 //将featuredefn复制后传入 OGRFeature * poOGRFeat = cvct2gdal::CVCT2GDALFeature ( poVCTFeat, poOGRFeatDefn->Clone()); poOGRLayer->CreateFeature ( poOGRFeat ); //在window下,释放内存会报错 #ifndef WIN32 OGRFeature::DestroyFeature(poOGRFeat); #endif } //在window下,释放内存会报错 #ifndef WIN32 poOGRFeatDefn->Release(); #endif }
~OGRCouchDBOneLineLayer() { delete poFeature; if( poFeatureDefn != NULL ) poFeatureDefn->Release(); }