Skip to content

Commit c400326

Browse files
committedFeb 7, 2017
Fix memory leak in geometry snapper
1 parent cb1849f commit c400326

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed
 

‎src/analysis/vector/qgsgeometrysnapper.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -592,12 +592,12 @@ QgsGeometry QgsGeometrySnapper::snapGeometry( const QgsGeometry& geometry, doubl
592592
return QgsGeometry( subjGeom );
593593

594594
// SnapIndex for subject feature
595-
QgsSnapIndex* subjSnapIndex = new QgsSnapIndex( center, 10 * snapTolerance );
595+
std::unique_ptr< QgsSnapIndex > subjSnapIndex( new QgsSnapIndex( center, 10 * snapTolerance ) );
596596
subjSnapIndex->addGeometry( subjGeom );
597597

598-
QgsAbstractGeometry* origSubjGeom = subjGeom->clone();
599-
QgsSnapIndex* origSubjSnapIndex = new QgsSnapIndex( center, 10 * snapTolerance );
600-
origSubjSnapIndex->addGeometry( origSubjGeom );
598+
std::unique_ptr< QgsAbstractGeometry > origSubjGeom( subjGeom->clone() );
599+
std::unique_ptr< QgsSnapIndex > origSubjSnapIndex( new QgsSnapIndex( center, 10 * snapTolerance ) );
600+
origSubjSnapIndex->addGeometry( origSubjGeom.get() );
601601

602602
// Pass 2: add missing vertices to subject geometry
603603
Q_FOREACH ( const QgsGeometry& refGeom, refGeometries )
@@ -638,17 +638,17 @@ QgsGeometry QgsGeometrySnapper::snapGeometry( const QgsGeometry& geometry, doubl
638638
const QgsSnapIndex::CoordIdx* idx = snapSegment->idxFrom;
639639
subjGeom->insertVertex( QgsVertexId( idx->vidx.part, idx->vidx.ring, idx->vidx.vertex + 1 ), point );
640640
subjPointFlags[idx->vidx.part][idx->vidx.ring].insert( idx->vidx.vertex + 1, SnappedToRefNode );
641-
delete subjSnapIndex;
642-
subjSnapIndex = new QgsSnapIndex( center, 10 * snapTolerance );
641+
subjSnapIndex.reset( new QgsSnapIndex( center, 10 * snapTolerance ) );
643642
subjSnapIndex->addGeometry( subjGeom );
644643
}
645644
}
646645
}
647646
}
648647
}
649648
}
650-
delete subjSnapIndex;
651-
delete origSubjSnapIndex;
649+
subjSnapIndex.reset();
650+
origSubjSnapIndex.reset();
651+
origSubjGeom.reset();
652652

653653
// Pass 3: remove superfluous vertices: all vertices which are snapped to a segment and not preceded or succeeded by an unsnapped vertex
654654
for ( int iPart = 0, nParts = subjGeom->partCount(); iPart < nParts; ++iPart )

0 commit comments

Comments
 (0)
Please sign in to comment.