@@ -3171,7 +3171,9 @@ QgsExpressionNodeBinaryOperator *QgsOgcUtilsExpressionFromFilter::nodeBinaryOper
3171
3171
}
3172
3172
3173
3173
QDomElement operandElem = element.firstChildElement ();
3174
- QgsExpressionNode *expr = nodeFromOgcFilter ( operandElem ), *leftOp = expr;
3174
+ std::unique_ptr<QgsExpressionNode> expr ( nodeFromOgcFilter ( operandElem ) );
3175
+ std::unique_ptr<QgsExpressionNode> leftOp ( expr->clone () );
3176
+
3175
3177
if ( !expr )
3176
3178
{
3177
3179
mErrorMessage = QObject::tr ( " invalid left operand for '%1' binary operator" ).arg ( element.tagName () );
@@ -3180,11 +3182,10 @@ QgsExpressionNodeBinaryOperator *QgsOgcUtilsExpressionFromFilter::nodeBinaryOper
3180
3182
3181
3183
for ( operandElem = operandElem.nextSiblingElement (); !operandElem.isNull (); operandElem = operandElem.nextSiblingElement () )
3182
3184
{
3183
- QgsExpressionNode * opRight = nodeFromOgcFilter ( operandElem );
3185
+ std::unique_ptr< QgsExpressionNode> opRight ( nodeFromOgcFilter ( operandElem ) );
3184
3186
if ( !opRight )
3185
3187
{
3186
3188
mErrorMessage = QObject::tr ( " invalid right operand for '%1' binary operator" ).arg ( element.tagName () );
3187
- delete expr;
3188
3189
return nullptr ;
3189
3190
}
3190
3191
@@ -3206,7 +3207,7 @@ QgsExpressionNodeBinaryOperator *QgsOgcUtilsExpressionFromFilter::nodeBinaryOper
3206
3207
escape = element.attribute ( QStringLiteral ( " escape" ) );
3207
3208
}
3208
3209
// replace
3209
- QString oprValue = static_cast <const QgsExpressionNodeLiteral *>( opRight )->value ().toString ();
3210
+ QString oprValue = static_cast <const QgsExpressionNodeLiteral *>( opRight. get () )->value ().toString ();
3210
3211
if ( !wildCard.isEmpty () && wildCard != QLatin1String ( " %" ) )
3211
3212
{
3212
3213
oprValue.replace ( ' %' , QLatin1String ( " \\ %" ) );
@@ -3243,24 +3244,19 @@ QgsExpressionNodeBinaryOperator *QgsOgcUtilsExpressionFromFilter::nodeBinaryOper
3243
3244
{
3244
3245
oprValue.replace ( escape + escape, escape );
3245
3246
}
3246
- opRight = new QgsExpressionNodeLiteral ( oprValue );
3247
+ opRight. reset ( new QgsExpressionNodeLiteral ( oprValue ) );
3247
3248
}
3248
3249
3249
- expr = new QgsExpressionNodeBinaryOperator ( static_cast < QgsExpressionNodeBinaryOperator::BinaryOperator >( op ), expr, opRight );
3250
+ expr. reset ( new QgsExpressionNodeBinaryOperator ( static_cast < QgsExpressionNodeBinaryOperator::BinaryOperator >( op ), expr. release () , opRight. release () ) );
3250
3251
}
3251
3252
3252
3253
if ( expr == leftOp )
3253
3254
{
3254
3255
mErrorMessage = QObject::tr ( " only one operand for '%1' binary operator" ).arg ( element.tagName () );
3255
- delete expr;
3256
3256
return nullptr ;
3257
3257
}
3258
3258
3259
- QgsExpressionNodeBinaryOperator *ret = dynamic_cast < QgsExpressionNodeBinaryOperator * >( expr );
3260
- if ( !ret )
3261
- delete expr;
3262
-
3263
- return ret;
3259
+ return dynamic_cast < QgsExpressionNodeBinaryOperator * >( expr.release () );
3264
3260
}
3265
3261
3266
3262
0 commit comments