From 588333c9438bfd97c027c2cd0d4936f5b4cbf25a Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Fri, 24 Aug 2018 13:55:32 +0200 Subject: loplugin:useuniqueptr for ScOutlineTable in the undo code fixing what looks like a couple of leaks on some paths Change-Id: Idc851b8ffca8e5ed1bd54c9195442709ed310d40 Reviewed-on: https://gerrit.libreoffice.org/59558 Tested-by: Jenkins Reviewed-by: Noel Grandin --- sc/source/ui/docshell/dbdocfun.cxx | 6 +++--- sc/source/ui/docshell/docfunc.cxx | 8 ++++---- sc/source/ui/docshell/olinefun.cxx | 37 +++++++++++++++++-------------------- sc/source/ui/inc/undoblk.hxx | 2 +- sc/source/ui/inc/undodat.hxx | 12 ++++++------ sc/source/ui/undo/undoblk2.cxx | 4 ++-- sc/source/ui/undo/undodat.cxx | 24 ++++++++++++------------ sc/source/ui/view/dbfunc3.cxx | 6 +++--- sc/source/ui/view/viewfunc.cxx | 8 ++++---- 9 files changed, 52 insertions(+), 55 deletions(-) diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx index 83eb6215ac77..1157972ee407 100644 --- a/sc/source/ui/docshell/dbdocfun.cxx +++ b/sc/source/ui/docshell/dbdocfun.cxx @@ -1028,7 +1028,7 @@ void ScDBDocFunc::DoSubTotals( SCTAB nTab, const ScSubTotalParam& rParam, ScSubTotalParam aNewParam( rParam ); // end of range is being changed ScDocument* pUndoDoc = nullptr; - ScOutlineTable* pUndoTab = nullptr; + std::unique_ptr pUndoTab; ScRangeName* pUndoRange = nullptr; ScDBCollection* pUndoDB = nullptr; @@ -1041,7 +1041,7 @@ void ScDBDocFunc::DoSubTotals( SCTAB nTab, const ScSubTotalParam& rParam, ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab ); if (pTable) { - pUndoTab = new ScOutlineTable( *pTable ); + pUndoTab.reset(new ScOutlineTable( *pTable )); // column/row state SCCOLROW nOutStartCol, nOutEndCol; @@ -1110,7 +1110,7 @@ void ScDBDocFunc::DoSubTotals( SCTAB nTab, const ScSubTotalParam& rParam, rDocShell.GetUndoManager()->AddUndoAction( new ScUndoSubTotals( &rDocShell, nTab, rParam, aNewParam.nRow2, - pUndoDoc, pUndoTab, // pUndoDBData, + pUndoDoc, std::move(pUndoTab), // pUndoDBData, pUndoRange, pUndoDB ) ); } diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index ca4089b8a448..db989b28a661 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -3533,7 +3533,7 @@ bool ScDocFunc::SetWidthOrHeight( } ScDocument* pUndoDoc = nullptr; - ScOutlineTable* pUndoTab = nullptr; + std::unique_ptr pUndoTab; std::vector aUndoRanges; if ( bRecord ) @@ -3556,7 +3556,7 @@ bool ScDocFunc::SetWidthOrHeight( ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab ); if (pTable) - pUndoTab = new ScOutlineTable( *pTable ); + pUndoTab.reset(new ScOutlineTable( *pTable )); } bool bShow = nSizeTwips > 0 || eMode != SC_SIZE_DIRECT; @@ -3650,7 +3650,7 @@ bool ScDocFunc::SetWidthOrHeight( rDoc.SetDrawPageSize(nTab); if (!bOutline) - DELETEZ(pUndoTab); + pUndoTab.reset(); if (bRecord) { @@ -3659,7 +3659,7 @@ bool ScDocFunc::SetWidthOrHeight( rDocShell.GetUndoManager()->AddUndoAction( new ScUndoWidthOrHeight( &rDocShell, aMark, nStart, nTab, nEnd, nTab, pUndoDoc, - aUndoRanges, pUndoTab, eMode, nSizeTwips, bWidth)); + aUndoRanges, std::move(pUndoTab), eMode, nSizeTwips, bWidth)); } rDoc.UpdatePageBreaks( nTab ); diff --git a/sc/source/ui/docshell/olinefun.cxx b/sc/source/ui/docshell/olinefun.cxx index 4060625466fa..d22d5e3a11d8 100644 --- a/sc/source/ui/docshell/olinefun.cxx +++ b/sc/source/ui/docshell/olinefun.cxx @@ -89,13 +89,13 @@ void ScOutlineDocFunc::MakeOutline( const ScRange& rRange, bool bColumns, bool b ScDocument& rDoc = rDocShell.GetDocument(); ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab, true ); - ScOutlineTable* pUndoTab = nullptr; + std::unique_ptr pUndoTab; if (bRecord && !rDoc.IsUndoEnabled()) bRecord = false; if (bRecord) - pUndoTab = new ScOutlineTable( *pTable ); + pUndoTab.reset(new ScOutlineTable( *pTable )); ScOutlineArray& rArray = bColumns ? pTable->GetColArray() : pTable->GetRowArray(); @@ -113,7 +113,7 @@ void ScOutlineDocFunc::MakeOutline( const ScRange& rRange, bool bColumns, bool b rDocShell.GetUndoManager()->AddUndoAction( new ScUndoMakeOutline( &rDocShell, nStartCol,nStartRow,nTab,nEndCol,nEndRow,nTab, - pUndoTab, bColumns, true ) ); + std::move(pUndoTab), bColumns, true ) ); } rDoc.SetStreamValid(nTab, false); @@ -134,7 +134,6 @@ void ScOutlineDocFunc::MakeOutline( const ScRange& rRange, bool bColumns, bool b { if (!bApi) rDocShell.ErrorMessage(STR_MSSG_MAKEOUTLINE_0); // "Grouping not possible" - delete pUndoTab; } } @@ -155,9 +154,9 @@ void ScOutlineDocFunc::RemoveOutline( const ScRange& rRange, bool bColumns, bool ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab ); if (pTable) { - ScOutlineTable* pUndoTab = nullptr; + std::unique_ptr pUndoTab; if (bRecord) - pUndoTab = new ScOutlineTable( *pTable ); + pUndoTab.reset(new ScOutlineTable( *pTable )); ScOutlineArray& rArray = bColumns ? pTable->GetColArray() : pTable->GetRowArray(); @@ -175,7 +174,7 @@ void ScOutlineDocFunc::RemoveOutline( const ScRange& rRange, bool bColumns, bool rDocShell.GetUndoManager()->AddUndoAction( new ScUndoMakeOutline( &rDocShell, nStartCol,nStartRow,nTab, nEndCol,nEndRow,nTab, - pUndoTab, bColumns, false ) ); + std::move(pUndoTab), bColumns, false ) ); } rDoc.SetStreamValid(nTab, false); @@ -195,8 +194,6 @@ void ScOutlineDocFunc::RemoveOutline( const ScRange& rRange, bool bColumns, bool // we are not enabling again -> no UpdatePageBreaks } - else - delete pUndoTab; } if (!bDone && !bApi) @@ -228,13 +225,13 @@ bool ScOutlineDocFunc::RemoveAllOutlines( SCTAB nTab, bool bRecord ) rDoc.CopyToDocument(nStartCol, 0, nTab, nEndCol, MAXROW, nTab, InsertDeleteFlags::NONE, false, *pUndoDoc); rDoc.CopyToDocument(0, nStartRow, nTab, MAXCOL, nEndRow, nTab, InsertDeleteFlags::NONE, false, *pUndoDoc); - ScOutlineTable* pUndoTab = new ScOutlineTable( *pTable ); + std::unique_ptr pUndoTab(new ScOutlineTable( *pTable )); rDocShell.GetUndoManager()->AddUndoAction( new ScUndoRemoveAllOutlines( &rDocShell, nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, - pUndoDoc, pUndoTab ) ); + pUndoDoc, std::move(pUndoTab) ) ); } SelectLevel( nTab, true, pTable->GetColArray().GetDepth(), false, false ); @@ -270,13 +267,13 @@ void ScOutlineDocFunc::AutoOutline( const ScRange& rRange, bool bRecord ) ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab ); ScDocument* pUndoDoc = nullptr; - ScOutlineTable* pUndoTab = nullptr; + std::unique_ptr pUndoTab; if ( pTable ) { if ( bRecord ) { - pUndoTab = new ScOutlineTable( *pTable ); + pUndoTab.reset(new ScOutlineTable( *pTable )); SCCOLROW nCol1, nCol2, nRow1, nRow2; pTable->GetColArray().GetRange( nCol1, nCol2 ); @@ -306,7 +303,7 @@ void ScOutlineDocFunc::AutoOutline( const ScRange& rRange, bool bRecord ) new ScUndoAutoOutline( &rDocShell, nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, - pUndoDoc, pUndoTab ) ); + pUndoDoc, std::move(pUndoTab) ) ); } rDoc.SetStreamValid(nTab, false); @@ -335,7 +332,7 @@ bool ScOutlineDocFunc::SelectLevel( SCTAB nTab, bool bColumns, sal_uInt16 nLevel // this is a temporarily workaround if (!comphelper::LibreOfficeKit::isActive() && bRecord ) { - ScOutlineTable* pUndoTab = new ScOutlineTable( *pTable ); + std::unique_ptr pUndoTab(new ScOutlineTable( *pTable )); ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); if (bColumns) { @@ -353,7 +350,7 @@ bool ScOutlineDocFunc::SelectLevel( SCTAB nTab, bool bColumns, sal_uInt16 nLevel rDocShell.GetUndoManager()->AddUndoAction( new ScUndoOutlineLevel( &rDocShell, nStart, nEnd, nTab, //! calculate start and end - pUndoDoc, pUndoTab, + pUndoDoc, std::move(pUndoTab), bColumns, nLevel ) ); } @@ -457,7 +454,7 @@ bool ScOutlineDocFunc::ShowMarkedOutlines( const ScRange& rRange, bool bRecord ) // this is a temporarily workaround if ( !comphelper::LibreOfficeKit::isActive() && bRecord ) { - ScOutlineTable* pUndoTab = new ScOutlineTable( *pTable ); + std::unique_ptr pUndoTab(new ScOutlineTable( *pTable )); ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); pUndoDoc->InitUndo( &rDoc, nTab, nTab, true, true ); rDoc.CopyToDocument(nStartCol, 0, nTab, nEndCol, MAXROW, nTab, InsertDeleteFlags::NONE, false, *pUndoDoc); @@ -466,7 +463,7 @@ bool ScOutlineDocFunc::ShowMarkedOutlines( const ScRange& rRange, bool bRecord ) rDocShell.GetUndoManager()->AddUndoAction( new ScUndoOutlineBlock( &rDocShell, nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, - pUndoDoc, pUndoTab, true ) ); + pUndoDoc, std::move(pUndoTab), true ) ); } // Columns @@ -583,7 +580,7 @@ bool ScOutlineDocFunc::HideMarkedOutlines( const ScRange& rRange, bool bRecord ) // this is a temporarily workaround if ( !comphelper::LibreOfficeKit::isActive() && bRecord ) { - ScOutlineTable* pUndoTab = new ScOutlineTable( *pTable ); + std::unique_ptr pUndoTab(new ScOutlineTable( *pTable )); ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); pUndoDoc->InitUndo( &rDoc, nTab, nTab, true, true ); rDoc.CopyToDocument(static_cast(nEffStartCol), 0, nTab, @@ -594,7 +591,7 @@ bool ScOutlineDocFunc::HideMarkedOutlines( const ScRange& rRange, bool bRecord ) rDocShell.GetUndoManager()->AddUndoAction( new ScUndoOutlineBlock( &rDocShell, nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, - pUndoDoc, pUndoTab, false ) ); + pUndoDoc, std::move(pUndoTab), false ) ); } // Columns diff --git a/sc/source/ui/inc/undoblk.hxx b/sc/source/ui/inc/undoblk.hxx index 90100c3ac292..f36842ce1cdc 100644 --- a/sc/source/ui/inc/undoblk.hxx +++ b/sc/source/ui/inc/undoblk.hxx @@ -365,7 +365,7 @@ public: SCCOLROW nNewEnd, SCTAB nNewEndTab, ScDocument* pNewUndoDoc, const std::vector& rRanges, - ScOutlineTable* pNewUndoTab, + std::unique_ptr pNewUndoTab, ScSizeMode eNewMode, sal_uInt16 nNewSizeTwips, bool bNewWidth ); virtual ~ScUndoWidthOrHeight() override; diff --git a/sc/source/ui/inc/undodat.hxx b/sc/source/ui/inc/undodat.hxx index bb8a86213ba1..b9155ddbeb8a 100644 --- a/sc/source/ui/inc/undodat.hxx +++ b/sc/source/ui/inc/undodat.hxx @@ -74,7 +74,7 @@ public: ScUndoMakeOutline( ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScOutlineTable* pNewUndoTab, + std::unique_ptr pNewUndoTab, bool bNewColumns, bool bNewMake ); virtual ~ScUndoMakeOutline() override; @@ -99,7 +99,7 @@ class ScUndoOutlineLevel: public ScSimpleUndo public: ScUndoOutlineLevel(ScDocShell* pNewDocShell, SCCOLROW nNewStart, SCCOLROW nNewEnd, SCTAB nNewTab, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab, bool bNewColumns, sal_uInt16 nNewLevel); virtual void Undo() override; @@ -125,7 +125,7 @@ public: ScUndoOutlineBlock(ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab, bool bNewShow); virtual void Undo() override; @@ -149,7 +149,7 @@ public: ScUndoRemoveAllOutlines(ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab); + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab); virtual void Undo() override; virtual void Redo() override; @@ -171,7 +171,7 @@ public: ScUndoAutoOutline(ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab); + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab); virtual void Undo() override; virtual void Redo() override; @@ -192,7 +192,7 @@ class ScUndoSubTotals: public ScDBFuncUndo public: ScUndoSubTotals(ScDocShell* pNewDocShell, SCTAB nNewTab, const ScSubTotalParam& rNewParam, SCROW nNewEndY, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab, ScRangeName* pNewUndoRange, ScDBCollection* pNewUndoDB); virtual void Undo() override; diff --git a/sc/source/ui/undo/undoblk2.cxx b/sc/source/ui/undo/undoblk2.cxx index 8334c05dd455..78a6d898a8c3 100644 --- a/sc/source/ui/undo/undoblk2.cxx +++ b/sc/source/ui/undo/undoblk2.cxx @@ -39,7 +39,7 @@ ScUndoWidthOrHeight::ScUndoWidthOrHeight( ScDocShell* pNewDocShell, const ScMarkData& rMark, SCCOLROW nNewStart, SCTAB nNewStartTab, SCCOLROW nNewEnd, SCTAB nNewEndTab, ScDocument* pNewUndoDoc, const std::vector& rRanges, - ScOutlineTable* pNewUndoTab, + std::unique_ptr pNewUndoTab, ScSizeMode eNewMode, sal_uInt16 nNewSizeTwips, bool bNewWidth ) : ScSimpleUndo( pNewDocShell ), aMarkData( rMark ), @@ -48,7 +48,7 @@ ScUndoWidthOrHeight::ScUndoWidthOrHeight( ScDocShell* pNewDocShell, nStartTab( nNewStartTab ), nEndTab( nNewEndTab ), pUndoDoc( pNewUndoDoc ), - pUndoTab( pNewUndoTab ), + pUndoTab( std::move(pNewUndoTab) ), maRanges(rRanges), nNewSize( nNewSizeTwips ), bWidth( bNewWidth ), diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx index 5c6c11acbdb8..5bd7e6adf551 100644 --- a/sc/source/ui/undo/undodat.cxx +++ b/sc/source/ui/undo/undodat.cxx @@ -144,11 +144,11 @@ bool ScUndoDoOutline::CanRepeat(SfxRepeatTarget& /* rTarget */) const ScUndoMakeOutline::ScUndoMakeOutline( ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScOutlineTable* pNewUndoTab, bool bNewColumns, bool bNewMake ) : + std::unique_ptr pNewUndoTab, bool bNewColumns, bool bNewMake ) : ScSimpleUndo( pNewDocShell ), aBlockStart( nStartX, nStartY, nStartZ ), aBlockEnd( nEndX, nEndY, nEndZ ), - pUndoTable( pNewUndoTab ), + pUndoTable( std::move(pNewUndoTab) ), bColumns( bNewColumns ), bMake( bNewMake ) { @@ -226,14 +226,14 @@ bool ScUndoMakeOutline::CanRepeat(SfxRepeatTarget& rTarget) const ScUndoOutlineLevel::ScUndoOutlineLevel( ScDocShell* pNewDocShell, SCCOLROW nNewStart, SCCOLROW nNewEnd, SCTAB nNewTab, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab, bool bNewColumns, sal_uInt16 nNewLevel ) : ScSimpleUndo(pNewDocShell) , nStart(nNewStart) , nEnd(nNewEnd) , nTab(nNewTab) , xUndoDoc(pNewUndoDoc) - , xUndoTable(pNewUndoTab) + , xUndoTable(std::move(pNewUndoTab)) , bColumns(bNewColumns) , nLevel(nNewLevel) { @@ -308,12 +308,12 @@ bool ScUndoOutlineLevel::CanRepeat(SfxRepeatTarget& rTarget) const ScUndoOutlineBlock::ScUndoOutlineBlock( ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, bool bNewShow ) : + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab, bool bNewShow ) : ScSimpleUndo( pNewDocShell ), aBlockStart( nStartX, nStartY, nStartZ ), aBlockEnd( nEndX, nEndY, nEndZ ), xUndoDoc(pNewUndoDoc), - xUndoTable(pNewUndoTab), + xUndoTable(std::move(pNewUndoTab)), bShow( bNewShow ) { } @@ -408,12 +408,12 @@ bool ScUndoOutlineBlock::CanRepeat(SfxRepeatTarget& rTarget) const ScUndoRemoveAllOutlines::ScUndoRemoveAllOutlines(ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab) + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab) : ScSimpleUndo(pNewDocShell) , aBlockStart(nStartX, nStartY, nStartZ) , aBlockEnd(nEndX, nEndY, nEndZ) , xUndoDoc(pNewUndoDoc) - , xUndoTable(pNewUndoTab) + , xUndoTable(std::move(pNewUndoTab)) { } @@ -489,12 +489,12 @@ bool ScUndoRemoveAllOutlines::CanRepeat(SfxRepeatTarget& rTarget) const ScUndoAutoOutline::ScUndoAutoOutline(ScDocShell* pNewDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab) + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab) : ScSimpleUndo(pNewDocShell) , aBlockStart(nStartX, nStartY, nStartZ) , aBlockEnd(nEndX, nEndY, nEndZ) , xUndoDoc(pNewUndoDoc) - , xUndoTable(pNewUndoTab) + , xUndoTable(std::move(pNewUndoTab)) { } @@ -585,7 +585,7 @@ bool ScUndoAutoOutline::CanRepeat(SfxRepeatTarget& rTarget) const ScUndoSubTotals::ScUndoSubTotals(ScDocShell* pNewDocShell, SCTAB nNewTab, const ScSubTotalParam& rNewParam, SCROW nNewEndY, - ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, + ScDocument* pNewUndoDoc, std::unique_ptr pNewUndoTab, ScRangeName* pNewUndoRange, ScDBCollection* pNewUndoDB) : ScDBFuncUndo(pNewDocShell, ScRange(rNewParam.nCol1, rNewParam.nRow1, nNewTab, rNewParam.nCol2, rNewParam.nRow2, nNewTab)) @@ -593,7 +593,7 @@ ScUndoSubTotals::ScUndoSubTotals(ScDocShell* pNewDocShell, SCTAB nNewTab, , aParam(rNewParam) , nNewEndRow(nNewEndY) , xUndoDoc(pNewUndoDoc) - , xUndoTable(pNewUndoTab) + , xUndoTable(std::move(pNewUndoTab)) , xUndoRange(pNewUndoRange) , xUndoDB(pNewUndoDB) { diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx index f5b1e6b9d670..b00359412132 100644 --- a/sc/source/ui/view/dbfunc3.cxx +++ b/sc/source/ui/view/dbfunc3.cxx @@ -438,7 +438,7 @@ void ScDBFunc::DoSubTotals( const ScSubTotalParam& rParam, bool bRecord, ScSubTotalParam aNewParam( rParam ); // change end of range ScDocument* pUndoDoc = nullptr; - ScOutlineTable* pUndoTab = nullptr; + std::unique_ptr pUndoTab; ScRangeName* pUndoRange = nullptr; ScDBCollection* pUndoDB = nullptr; @@ -450,7 +450,7 @@ void ScDBFunc::DoSubTotals( const ScSubTotalParam& rParam, bool bRecord, ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab ); if (pTable) { - pUndoTab = new ScOutlineTable( *pTable ); + pUndoTab.reset(new ScOutlineTable( *pTable )); SCCOLROW nOutStartCol; // row/column status SCCOLROW nOutStartRow; @@ -526,7 +526,7 @@ void ScDBFunc::DoSubTotals( const ScSubTotalParam& rParam, bool bRecord, pDocSh->GetUndoManager()->AddUndoAction( new ScUndoSubTotals( pDocSh, nTab, rParam, aNewParam.nRow2, - pUndoDoc, pUndoTab, // pUndoDBData, + pUndoDoc, std::move(pUndoTab), // pUndoDBData, pUndoRange, pUndoDB ) ); } diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index a940afba1bea..a1baca741e0e 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -2063,7 +2063,7 @@ void ScViewFunc::SetWidthOrHeight( } ScDocument* pUndoDoc = nullptr; - ScOutlineTable* pUndoTab = nullptr; + std::unique_ptr pUndoTab; std::vector aUndoRanges; if ( bRecord ) @@ -2099,7 +2099,7 @@ void ScViewFunc::SetWidthOrHeight( //! outlines from all tab? ScOutlineTable* pTable = rDoc.GetOutlineTable( nCurTab ); if (pTable) - pUndoTab = new ScOutlineTable( *pTable ); + pUndoTab.reset(new ScOutlineTable( *pTable )); } if ( eMode==SC_SIZE_OPTIMAL || eMode==SC_SIZE_VISOPT ) @@ -2225,14 +2225,14 @@ void ScViewFunc::SetWidthOrHeight( } if (!bOutline) - DELETEZ(pUndoTab); + pUndoTab.reset(); if (bRecord) { pDocSh->GetUndoManager()->AddUndoAction( new ScUndoWidthOrHeight( pDocSh, aMarkData, nStart, nCurTab, nEnd, nCurTab, - pUndoDoc, aUndoRanges, pUndoTab, eMode, nSizeTwips, bWidth)); + pUndoDoc, aUndoRanges, std::move(pUndoTab), eMode, nSizeTwips, bWidth)); } if (nCurX < 0) -- cgit