@@ -98,7 +98,7 @@ void QgsGeometryOverlapCheck::fixError( QgsGeometryCheckError *error, int method
9898 error->setObsolete ();
9999 return ;
100100 }
101- QgsAbstractGeometry * interGeom = geomEngineA->intersection ( layerFeatureB.geometry (), &errMsg );
101+ std::unique_ptr< QgsAbstractGeometry > interGeom ( geomEngineA->intersection ( layerFeatureB.geometry (), &errMsg ) );
102102 if ( !interGeom )
103103 {
104104 error->setFixFailed ( tr ( " Failed to compute intersection between overlapping features: %1" ).arg ( errMsg ) );
@@ -109,7 +109,7 @@ void QgsGeometryOverlapCheck::fixError( QgsGeometryCheckError *error, int method
109109 QgsAbstractGeometry *interPart = nullptr ;
110110 for ( int iPart = 0 , nParts = interGeom->partCount (); iPart < nParts; ++iPart )
111111 {
112- QgsAbstractGeometry *part = QgsGeometryCheckerUtils::getGeomPart ( interGeom, iPart );
112+ QgsAbstractGeometry *part = QgsGeometryCheckerUtils::getGeomPart ( interGeom. get () , iPart );
113113 if ( std::fabs ( part->area () - overlapError->value ().toDouble () ) < mContext ->reducedTolerance &&
114114 QgsGeometryCheckerUtils::pointsFuzzyEqual ( part->centroid (), overlapError->location (), mContext ->reducedTolerance ) )
115115 {
@@ -119,7 +119,6 @@ void QgsGeometryOverlapCheck::fixError( QgsGeometryCheckError *error, int method
119119 }
120120 if ( !interPart || interPart->isEmpty () )
121121 {
122- delete interGeom;
123122 error->setObsolete ();
124123 return ;
125124 }
@@ -131,30 +130,28 @@ void QgsGeometryOverlapCheck::fixError( QgsGeometryCheckError *error, int method
131130 }
132131 else if ( method == Subtract )
133132 {
134- QgsAbstractGeometry * diff1 = geomEngineA->difference ( interPart, &errMsg );
133+ std::unique_ptr< QgsAbstractGeometry > diff1 ( geomEngineA->difference ( interPart, &errMsg ) );
135134 if ( !diff1 || diff1->isEmpty () )
136135 {
137- delete diff1;
138- diff1 = nullptr ;
136+ diff1.reset ();
139137 }
140138 else
141139 {
142- QgsGeometryCheckerUtils::filter1DTypes ( diff1 );
140+ QgsGeometryCheckerUtils::filter1DTypes ( diff1. get () );
143141 }
144142 std::unique_ptr< QgsGeometryEngine > geomEngineB = QgsGeometryCheckerUtils::createGeomEngine ( layerFeatureB.geometry (), mContext ->reducedTolerance );
145- QgsAbstractGeometry * diff2 = geomEngineB->difference ( interPart, &errMsg );
143+ std::unique_ptr< QgsAbstractGeometry > diff2 ( geomEngineB->difference ( interPart, &errMsg ) );
146144 if ( !diff2 || diff2->isEmpty () )
147145 {
148- delete diff2;
149- diff2 = nullptr ;
146+ diff2.reset ();
150147 }
151148 else
152149 {
153- QgsGeometryCheckerUtils::filter1DTypes ( diff2 );
150+ QgsGeometryCheckerUtils::filter1DTypes ( diff2. get () );
154151 }
155- double shared1 = diff1 ? QgsGeometryCheckerUtils::sharedEdgeLength ( diff1, interPart, mContext ->reducedTolerance ) : 0 ;
156- double shared2 = diff2 ? QgsGeometryCheckerUtils::sharedEdgeLength ( diff2, interPart, mContext ->reducedTolerance ) : 0 ;
157- if ( shared1 == 0 . || shared2 == 0 . )
152+ double shared1 = diff1 ? QgsGeometryCheckerUtils::sharedEdgeLength ( diff1. get () , interPart, mContext ->reducedTolerance ) : 0 ;
153+ double shared2 = diff2 ? QgsGeometryCheckerUtils::sharedEdgeLength ( diff2. get () , interPart, mContext ->reducedTolerance ) : 0 ;
154+ if ( !diff1 || !diff2 || shared1 == 0 . || shared2 == 0 . )
158155 {
159156 error->setFixFailed ( tr ( " Could not find shared edges between intersection and overlapping features" ) );
160157 }
@@ -163,32 +160,27 @@ void QgsGeometryOverlapCheck::fixError( QgsGeometryCheckError *error, int method
163160 if ( shared1 < shared2 )
164161 {
165162 diff1->transform ( featurePoolA->getLayerToMapTransform (), QgsCoordinateTransform::ReverseTransform );
166- featureA.setGeometry ( QgsGeometry ( diff1 ) );
167- diff1 = 0 ;
163+ featureA.setGeometry ( QgsGeometry ( std::move ( diff1 ) ) );
168164
169165 changes[error->layerId ()][featureA.id ()].append ( Change ( ChangeFeature, ChangeChanged ) );
170166 featurePoolA->updateFeature ( featureA );
171167 }
172168 else
173169 {
174170 diff2->transform ( featurePoolB->getLayerToMapTransform (), QgsCoordinateTransform::ReverseTransform );
175- featureB.setGeometry ( QgsGeometry ( diff2 ) );
176- diff2 = 0 ;
171+ featureB.setGeometry ( QgsGeometry ( std::move ( diff2 ) ) );
177172
178173 changes[overlapError->overlappedFeature ().first ][featureB.id ()].append ( Change ( ChangeFeature, ChangeChanged ) );
179174 featurePoolB->updateFeature ( featureB );
180175 }
181176
182177 error->setFixed ( method );
183178 }
184- delete diff1;
185- delete diff2;
186179 }
187180 else
188181 {
189182 error->setFixFailed ( tr ( " Unknown method" ) );
190183 }
191- delete interGeom;
192184}
193185
194186QStringList QgsGeometryOverlapCheck::getResolutionMethods () const
0 commit comments