diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 7e86fa957..7df09786b 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -2421,9 +2421,8 @@ bool TMainWindow::EvalFormula(const QString &formula, bool fromUser, VContainer f = formula; } f.replace("\n", " "); - Calculator *cal = new Calculator(); + QScopedPointer cal(new Calculator()); qreal result = cal->EvalFormula(data->PlainVariables(), f); - delete cal; if (qIsInf(result) || qIsNaN(result)) { diff --git a/src/app/valentina/dialogs/dialogincrements.cpp b/src/app/valentina/dialogs/dialogincrements.cpp index 9c936f882..c308b3ff4 100644 --- a/src/app/valentina/dialogs/dialogincrements.cpp +++ b/src/app/valentina/dialogs/dialogincrements.cpp @@ -310,9 +310,8 @@ bool DialogIncrements::EvalIncrementFormula(const QString &formula, bool fromUse f = formula; } f.replace("\n", " "); - Calculator *cal = new Calculator(); + QScopedPointer cal(new Calculator()); const qreal result = cal->EvalFormula(data->PlainVariables(), f); - delete cal; if (qIsInf(result) || qIsNaN(result)) { diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 3aed8a375..d6fd0c0c4 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -2455,9 +2455,8 @@ qreal VPattern::EvalFormula(VContainer *data, const QString &formula, bool *ok) // Replace line return character with spaces for calc if exist QString f = formula; f.replace("\n", " "); - Calculator *cal = new Calculator(); + QScopedPointer cal(new Calculator()); const qreal result = cal->EvalFormula(data->PlainVariables(), f); - delete cal; (qIsInf(result) || qIsNaN(result)) ? *ok = false : *ok = true; return result; diff --git a/src/libs/vformat/vmeasurements.cpp b/src/libs/vformat/vmeasurements.cpp index de4e0402a..346931428 100644 --- a/src/libs/vformat/vmeasurements.cpp +++ b/src/libs/vformat/vmeasurements.cpp @@ -879,9 +879,8 @@ qreal VMeasurements::EvalFormula(VContainer *data, const QString &formula, bool // Replace line return character with spaces for calc if exist QString f = formula; f.replace("\n", " "); - Calculator *cal = new Calculator(); + QScopedPointer cal(new Calculator()); const qreal result = cal->EvalFormula(data->PlainVariables(), f); - delete cal; (qIsInf(result) || qIsNaN(result)) ? *ok = false : *ok = true; return result; diff --git a/src/libs/vpatterndb/calculator.h b/src/libs/vpatterndb/calculator.h index c3d89c22d..8f6030247 100644 --- a/src/libs/vpatterndb/calculator.h +++ b/src/libs/vpatterndb/calculator.h @@ -48,9 +48,8 @@ class VContainer; * //Need delete dialog here because parser in dialog don't allow use correct separator for parsing here. * //Don't know why. * delete dialog; - * Calculator *cal = new Calculator(); + * QScopedPointer cal(new Calculator()); * result = cal->EvalFormula(data->PlainVariables(), formula); - * delete cal;//Here can be memory leak, but dialog already check this formula and probability very low. * } */ class Calculator:public qmu::QmuFormulaBase diff --git a/src/libs/vpatterndb/vformula.cpp b/src/libs/vpatterndb/vformula.cpp index 811b2a4b8..703146d8b 100644 --- a/src/libs/vpatterndb/vformula.cpp +++ b/src/libs/vpatterndb/vformula.cpp @@ -234,10 +234,9 @@ void VFormula::Eval() { try { - Calculator *cal = new Calculator(); + QScopedPointer cal(new Calculator()); QString expression = qApp->TrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator()); const qreal result = cal->EvalFormula(data->PlainVariables(), expression); - delete cal; if (qIsInf(result) || qIsNaN(result)) { diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp index 9b0c1f080..200a52287 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp @@ -449,9 +449,8 @@ qreal DialogTool::Eval(const QString &text, bool &flag, QLabel *label, const QSt formula.replace("\n", " "); // Translate to internal look. formula = qApp->TrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator()); - Calculator *cal = new Calculator(); + QScopedPointer cal(new Calculator()); result = cal->EvalFormula(data->PlainVariables(), formula); - delete cal; if (qIsInf(result) || qIsNaN(result)) { diff --git a/src/libs/vtools/tools/drawTools/vdrawtool.cpp b/src/libs/vtools/tools/drawTools/vdrawtool.cpp index 29ac0a7c3..348ece144 100644 --- a/src/libs/vtools/tools/drawTools/vdrawtool.cpp +++ b/src/libs/vtools/tools/drawTools/vdrawtool.cpp @@ -294,9 +294,8 @@ qreal VDrawTool::CheckFormula(const quint32 &toolId, QString &formula, VContaine Calculator *cal = nullptr; try { - cal = new Calculator(); + QScopedPointer cal(new Calculator()); result = cal->EvalFormula(data->PlainVariables(), formula); - delete cal; if (qIsInf(result) || qIsNaN(result)) { @@ -311,11 +310,10 @@ qreal VDrawTool::CheckFormula(const quint32 &toolId, QString &formula, VContaine << "Message: " << e.GetMsg() << "\n" << "Expression: " << e.GetExpr() << "\n" << "--------------------------------------"; - delete cal; if (qApp->IsAppInGUIMode()) { - DialogUndo *dialogUndo = new DialogUndo(qApp->getMainWindow()); + QScopedPointer dialogUndo(new DialogUndo(qApp->getMainWindow())); forever { if (dialogUndo->exec() == QDialog::Accepted) @@ -323,8 +321,7 @@ qreal VDrawTool::CheckFormula(const quint32 &toolId, QString &formula, VContaine const UndoButton resultUndo = dialogUndo->Result(); if (resultUndo == UndoButton::Fix) { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, - qApp->getMainWindow()); + auto *dialog = new DialogEditWrongFormula(data, toolId, qApp->getMainWindow()); dialog->setWindowTitle(tr("Edit wrong formula")); dialog->SetFormula(formula); if (dialog->exec() == QDialog::Accepted) @@ -333,10 +330,8 @@ qreal VDrawTool::CheckFormula(const quint32 &toolId, QString &formula, VContaine /* Need delete dialog here because parser in dialog don't allow use correct separator for * parsing here. */ delete dialog; - Calculator *cal1 = new Calculator(); + QScopedPointer cal1(new Calculator()); result = cal1->EvalFormula(data->PlainVariables(), formula); - delete cal1; /* Here can be memory leak, but dialog already checked this formula and - probability very low. */ if (qIsInf(result) || qIsNaN(result)) { @@ -358,11 +353,9 @@ qreal VDrawTool::CheckFormula(const quint32 &toolId, QString &formula, VContaine } else { - delete dialogUndo; throw; } } - delete dialogUndo; } else { diff --git a/src/libs/vtools/visualization/visualization.cpp b/src/libs/vtools/visualization/visualization.cpp index 04292b85f..fc0838621 100644 --- a/src/libs/vtools/visualization/visualization.cpp +++ b/src/libs/vtools/visualization/visualization.cpp @@ -158,9 +158,8 @@ qreal Visualization::FindVal(const QString &expression, const QHashTrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator()); - Calculator *cal = new Calculator(); + QScopedPointer cal(new Calculator()); val = cal->EvalFormula(vars, formula); - delete cal; if (qIsInf(val) || qIsNaN(val)) {