Skip to content

Commit 2a03d2b

Browse files
committed
Safer memory management
1 parent 1a199d0 commit 2a03d2b

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

src/app/qgsapplayertreeviewmenuprovider.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -796,9 +796,9 @@ void QgsAppLayerTreeViewMenuProvider::setSymbolLegendNodeColor( const QColor &co
796796
if ( !originalSymbol )
797797
return;
798798

799-
QgsSymbol *newSymbol = originalSymbol->clone();
799+
std::unique_ptr< QgsSymbol > newSymbol( originalSymbol->clone() );
800800
newSymbol->setColor( color );
801-
node->setSymbol( newSymbol );
801+
node->setSymbol( newSymbol.release() );
802802
if ( QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( QgsProject::instance()->mapLayer( layerId ) ) )
803803
{
804804
layer->emitStyleChanged();

src/core/layertree/qgslayertreemodellegendnode.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,13 @@ void QgsSymbolLegendNode::setSymbol( QgsSymbol *symbol )
203203
if ( !symbol )
204204
return;
205205

206+
std::unique_ptr< QgsSymbol > s( symbol ); // this method takes ownership of symbol
206207
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mLayerNode->layer() );
207208
if ( !vlayer || !vlayer->renderer() )
208209
return;
209210

210-
mItem.setSymbol( symbol );
211-
vlayer->renderer()->setLegendSymbolItem( mItem.ruleKey(), symbol );
211+
mItem.setSymbol( s.get() ); // doesn't transfer ownership
212+
vlayer->renderer()->setLegendSymbolItem( mItem.ruleKey(), s.release() ); // DOES transfer ownership!
212213

213214
mPixmap = QPixmap();
214215

0 commit comments

Comments
 (0)