Skip to content

Commit c04b91f

Browse files
committed
Fix some memory leaks
1 parent 1178428 commit c04b91f

File tree

3 files changed

+16
-17
lines changed

3 files changed

+16
-17
lines changed

src/core/geometry/qgsinternalgeometryengine.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ QgsGeometry QgsInternalGeometryEngine::orthogonalize( double tolerance, int maxI
517517
}
518518

519519
// if extraNodesPerSegment < 0, then use distance based mode
520-
QgsLineString *doDensify( QgsLineString *ring, int extraNodesPerSegment = -1, double distance = 1 )
520+
QgsLineString *doDensify( const QgsLineString *ring, int extraNodesPerSegment = -1, double distance = 1 )
521521
{
522522
QVector< double > outX;
523523
QVector< double > outY;
@@ -627,11 +627,11 @@ QgsAbstractGeometry *densifyGeometry( const QgsAbstractGeometry *geom, int extra
627627
const QgsPolygon *polygon = static_cast< const QgsPolygon * >( geom );
628628
QgsPolygon *result = new QgsPolygon();
629629

630-
result->setExteriorRing( doDensify( static_cast< QgsLineString * >( polygon->exteriorRing()->clone() ),
630+
result->setExteriorRing( doDensify( static_cast< const QgsLineString * >( polygon->exteriorRing() ),
631631
extraNodesPerSegment, distance ) );
632632
for ( int i = 0; i < polygon->numInteriorRings(); ++i )
633633
{
634-
result->addInteriorRing( doDensify( static_cast< QgsLineString * >( polygon->interiorRing( i )->clone() ),
634+
result->addInteriorRing( doDensify( static_cast< const QgsLineString * >( polygon->interiorRing( i ) ),
635635
extraNodesPerSegment, distance ) );
636636
}
637637

src/core/processing/qgsprocessingalgorithm.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ bool QgsProcessingAlgorithm::validateInputCrs( const QVariantMap &parameters, Qg
183183
}
184184
else if ( def->type() == QStringLiteral( "source" ) )
185185
{
186-
QgsFeatureSource *source = QgsProcessingParameters::parameterAsSource( def, parameters, context );
186+
std::unique_ptr< QgsFeatureSource > source( QgsProcessingParameters::parameterAsSource( def, parameters, context ) );
187187
if ( source )
188188
{
189189
if ( foundCrs && source->sourceCrs().isValid() && crs != source->sourceCrs() )

tests/src/analysis/testqgsprocessing.cpp

+12-13
Original file line numberDiff line numberDiff line change
@@ -787,15 +787,15 @@ void TestQgsProcessing::mapLayers()
787787

788788
// Test layers from a string with parameters
789789
QString osmFilePath = testDataDir + "openstreetmap/testdata.xml";
790-
QgsVectorLayer *osm = qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::loadMapLayerFromString( osmFilePath ) );
790+
std::unique_ptr< QgsVectorLayer > osm( qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::loadMapLayerFromString( osmFilePath ) ) );
791791
QVERIFY( osm->isValid() );
792792
QCOMPARE( osm->geometryType(), QgsWkbTypes::PointGeometry );
793793

794-
osm = qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::loadMapLayerFromString( osmFilePath + "|layerid=3" ) );
794+
osm.reset( qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::loadMapLayerFromString( osmFilePath + "|layerid=3" ) ) );
795795
QVERIFY( osm->isValid() );
796796
QCOMPARE( osm->geometryType(), QgsWkbTypes::PolygonGeometry );
797797

798-
osm = qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::loadMapLayerFromString( osmFilePath + "|layerid=3|subset=\"building\" is not null" ) );
798+
osm.reset( qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::loadMapLayerFromString( osmFilePath + "|layerid=3|subset=\"building\" is not null" ) ) );
799799
QVERIFY( osm->isValid() );
800800
QCOMPARE( osm->geometryType(), QgsWkbTypes::PolygonGeometry );
801801
QCOMPARE( osm->subsetString(), QStringLiteral( "\"building\" is not null" ) );
@@ -966,6 +966,7 @@ void TestQgsProcessing::algorithm()
966966
QVERIFY( p2->algorithms().isEmpty() );
967967
p2->load();
968968
QCOMPARE( p2->algorithms().size(), 2 );
969+
delete p2;
969970

970971
// test that adding a provider to the registry automatically refreshes algorithms (via load)
971972
DummyProvider *p3 = new DummyProvider( "p3" );
@@ -4471,24 +4472,24 @@ void TestQgsProcessing::combineLayerExtent()
44714472
QString raster1 = testDataDir + "tenbytenraster.asc";
44724473
QString raster2 = testDataDir + "landsat.tif";
44734474
QFileInfo fi1( raster1 );
4474-
QgsRasterLayer *r1 = new QgsRasterLayer( fi1.filePath(), "R1" );
4475+
std::unique_ptr< QgsRasterLayer > r1( new QgsRasterLayer( fi1.filePath(), "R1" ) );
44754476
QFileInfo fi2( raster2 );
4476-
QgsRasterLayer *r2 = new QgsRasterLayer( fi2.filePath(), "R2" );
4477+
std::unique_ptr< QgsRasterLayer > r2( new QgsRasterLayer( fi2.filePath(), "R2" ) );
44774478

4478-
ext = QgsProcessingUtils::combineLayerExtents( QList< QgsMapLayer *>() << r1 );
4479+
ext = QgsProcessingUtils::combineLayerExtents( QList< QgsMapLayer *>() << r1.get() );
44794480
QGSCOMPARENEAR( ext.xMinimum(), 1535375.000000, 10 );
44804481
QGSCOMPARENEAR( ext.xMaximum(), 1535475, 10 );
44814482
QGSCOMPARENEAR( ext.yMinimum(), 5083255, 10 );
44824483
QGSCOMPARENEAR( ext.yMaximum(), 5083355, 10 );
44834484

4484-
ext = QgsProcessingUtils::combineLayerExtents( QList< QgsMapLayer *>() << r1 << r2 );
4485+
ext = QgsProcessingUtils::combineLayerExtents( QList< QgsMapLayer *>() << r1.get() << r2.get() );
44854486
QGSCOMPARENEAR( ext.xMinimum(), 781662, 10 );
44864487
QGSCOMPARENEAR( ext.xMaximum(), 1535475, 10 );
44874488
QGSCOMPARENEAR( ext.yMinimum(), 3339523, 10 );
44884489
QGSCOMPARENEAR( ext.yMaximum(), 5083355, 10 );
44894490

44904491
// with reprojection
4491-
ext = QgsProcessingUtils::combineLayerExtents( QList< QgsMapLayer *>() << r1 << r2, QgsCoordinateReferenceSystem::fromEpsgId( 3785 ) );
4492+
ext = QgsProcessingUtils::combineLayerExtents( QList< QgsMapLayer *>() << r1.get() << r2.get(), QgsCoordinateReferenceSystem::fromEpsgId( 3785 ) );
44924493
QGSCOMPARENEAR( ext.xMinimum(), 1995320, 10 );
44934494
QGSCOMPARENEAR( ext.xMaximum(), 2008833, 10 );
44944495
QGSCOMPARENEAR( ext.yMinimum(), 3523084, 10 );
@@ -5697,7 +5698,7 @@ void TestQgsProcessing::convertCompatible()
56975698
QVERIFY( out.startsWith( QgsProcessingUtils::tempFolder() ) );
56985699

56995700
// make sure all features are copied
5700-
QgsVectorLayer *t = new QgsVectorLayer( out, "vl2" );
5701+
std::unique_ptr< QgsVectorLayer > t = qgis::make_unique< QgsVectorLayer >( out, "vl2" );
57015702
QCOMPARE( layer->featureCount(), t->featureCount() );
57025703
QCOMPARE( layer->crs(), t->crs() );
57035704

@@ -5715,17 +5716,15 @@ void TestQgsProcessing::convertCompatible()
57155716
QVERIFY( out != layer->source() );
57165717
QVERIFY( out.endsWith( ".tab" ) );
57175718
QVERIFY( out.startsWith( QgsProcessingUtils::tempFolder() ) );
5718-
delete t;
5719-
t = new QgsVectorLayer( out, "vl2" );
5719+
t = qgis::make_unique< QgsVectorLayer >( out, "vl2" );
57205720
QCOMPARE( t->featureCount(), static_cast< long >( ids.count() ) );
57215721

57225722
// using a selection but existing format - will still require translation
57235723
out = QgsProcessingUtils::convertToCompatibleFormat( layer, true, QStringLiteral( "test" ), QStringList() << "shp", QString( "shp" ), context, &feedback );
57245724
QVERIFY( out != layer->source() );
57255725
QVERIFY( out.endsWith( ".shp" ) );
57265726
QVERIFY( out.startsWith( QgsProcessingUtils::tempFolder() ) );
5727-
delete t;
5728-
t = new QgsVectorLayer( out, "vl2" );
5727+
t = qgis::make_unique< QgsVectorLayer >( out, "vl2" );
57295728
QCOMPARE( t->featureCount(), static_cast< long >( ids.count() ) );
57305729

57315730

0 commit comments

Comments
 (0)