@@ -8220,18 +8220,15 @@ void QgisApp::pasteFromClipboard( QgsMapLayer *destinationLayer )
82208220void QgisApp::pasteAsNewVector ()
82218221{
82228222
8223- QgsVectorLayer * layer = pasteToNewMemoryVector ();
8223+ std::unique_ptr< QgsVectorLayer > layer = pasteToNewMemoryVector ();
82248224 if ( !layer )
82258225 return ;
82268226
8227- saveAsVectorFileGeneral ( layer, false );
8228-
8229- delete layer;
8227+ saveAsVectorFileGeneral ( layer.get (), false );
82308228}
82318229
82328230QgsVectorLayer *QgisApp::pasteAsNewMemoryVector ( const QString &layerName )
82338231{
8234-
82358232 QString layerNameCopy = layerName;
82368233
82378234 if ( layerNameCopy.isEmpty () )
@@ -8250,36 +8247,36 @@ QgsVectorLayer *QgisApp::pasteAsNewMemoryVector( const QString &layerName )
82508247 }
82518248 }
82528249
8253- QgsVectorLayer * layer = pasteToNewMemoryVector ();
8250+ std::unique_ptr< QgsVectorLayer > layer = pasteToNewMemoryVector ();
82548251 if ( !layer )
82558252 return nullptr ;
82568253
82578254 layer->setName ( layerNameCopy );
82588255
82598256 freezeCanvases ();
82608257
8261- QgsProject::instance ()->addMapLayer ( layer );
8258+ QgsVectorLayer *result = layer.get ();
8259+ QgsProject::instance ()->addMapLayer ( layer.release () );
82628260
82638261 freezeCanvases ( false );
82648262 refreshMapCanvas ();
82658263
8266- return layer ;
8264+ return result ;
82678265}
82688266
8269- QgsVectorLayer * QgisApp::pasteToNewMemoryVector ()
8267+ std::unique_ptr< QgsVectorLayer> QgisApp::pasteToNewMemoryVector ()
82708268{
8271- QgsFields fields = clipboard ()->fields ();
8269+ const QgsFields fields = clipboard ()->fields ();
82728270
82738271 // Decide geometry type from features, switch to multi type if at least one multi is found
82748272 QMap<QgsWkbTypes::Type, int > typeCounts;
8275- QgsFeatureList features = clipboard ()->copyOf ( fields );
8276- for ( int i = 0 ; i < features. size (); i++ )
8273+ const QgsFeatureList features = clipboard ()->copyOf ( fields );
8274+ for ( const QgsFeature &feature : features )
82778275 {
8278- QgsFeature &feature = features[i];
82798276 if ( !feature.hasGeometry () )
82808277 continue ;
82818278
8282- QgsWkbTypes::Type type = feature.geometry ().wkbType ();
8279+ const QgsWkbTypes::Type type = feature.geometry ().wkbType ();
82838280
82848281 if ( type == QgsWkbTypes::Unknown || type == QgsWkbTypes::NoGeometry )
82858282 continue ;
@@ -8307,7 +8304,7 @@ QgsVectorLayer *QgisApp::pasteToNewMemoryVector()
83078304 }
83088305 }
83098306
8310- QgsWkbTypes::Type wkbType = !typeCounts.isEmpty () ? typeCounts.keys ().value ( 0 ) : QgsWkbTypes::NoGeometry;
8307+ const QgsWkbTypes::Type wkbType = !typeCounts.isEmpty () ? typeCounts.keys ().value ( 0 ) : QgsWkbTypes::NoGeometry;
83118308
83128309 if ( features.isEmpty () )
83138310 {
@@ -8325,39 +8322,38 @@ QgsVectorLayer *QgisApp::pasteToNewMemoryVector()
83258322 QgsMessageBar::INFO, messageTimeout () );
83268323 }
83278324
8328- QgsVectorLayer * layer = QgsMemoryProviderUtils::createMemoryLayer ( QStringLiteral ( " pasted_features" ), QgsFields (), wkbType, clipboard ()->crs () );
8325+ std::unique_ptr< QgsVectorLayer > layer ( QgsMemoryProviderUtils::createMemoryLayer ( QStringLiteral ( " pasted_features" ), QgsFields (), wkbType, clipboard ()->crs () ) );
83298326
83308327 if ( !layer->isValid () || !layer->dataProvider () )
83318328 {
8332- delete layer;
83338329 messageBar ()->pushMessage ( tr ( " Paste features" ),
83348330 tr ( " Cannot create new layer." ),
83358331 QgsMessageBar::WARNING, messageTimeout () );
83368332 return nullptr ;
83378333 }
83388334
83398335 layer->startEditing ();
8340- Q_FOREACH ( QgsField f, clipboard ()->fields (). toList () )
8336+ for ( const QgsField &f : clipboard ()->fields () )
83418337 {
83428338 QgsDebugMsg ( QString ( " field %1 (%2)" ).arg ( f.name (), QVariant::typeToName ( f.type () ) ) );
83438339 if ( !layer->addAttribute ( f ) )
83448340 {
83458341 messageBar ()->pushMessage ( tr ( " Paste features" ),
83468342 tr ( " Cannot create field %1 (%2,%3)" ).arg ( f.name (), f.typeName (), QVariant::typeToName ( f.type () ) ),
83478343 QgsMessageBar::WARNING, messageTimeout () );
8348- delete layer;
83498344 return nullptr ;
83508345 }
83518346 }
83528347
83538348 // Convert to multi if necessary
8354- for ( int i = 0 ; i < features.size (); i++ )
8349+ QgsFeatureList convertedFeatures;
8350+ convertedFeatures.reserve ( features.length () );
8351+ for ( QgsFeature feature : features )
83558352 {
8356- QgsFeature &feature = features[i];
83578353 if ( !feature.hasGeometry () )
83588354 continue ;
83598355
8360- QgsWkbTypes::Type type = feature.geometry ().wkbType ();
8356+ const QgsWkbTypes::Type type = feature.geometry ().wkbType ();
83618357 if ( type == QgsWkbTypes::Unknown || type == QgsWkbTypes::NoGeometry )
83628358 continue ;
83638359
@@ -8372,11 +8368,11 @@ QgsVectorLayer *QgisApp::pasteToNewMemoryVector()
83728368 g.convertToMultiType ();
83738369 feature.setGeometry ( g );
83748370 }
8371+ convertedFeatures.append ( feature );
83758372 }
8376- if ( ! layer->addFeatures ( features ) || !layer->commitChanges () )
8373+ if ( ! layer->addFeatures ( convertedFeatures ) || !layer->commitChanges () )
83778374 {
83788375 QgsDebugMsg ( " Cannot add features or commit changes" );
8379- delete layer;
83808376 return nullptr ;
83818377 }
83828378
0 commit comments