Skip to content

Commit 47db075

Browse files
committed
qt: Plug many memory leaks
None of these are very serious, and are leaks in objects that are created at most one time. In most cases this means properly using the QObject parent hierarchy, except for BanTablePriv/PeerTablePriv which are not QObject, so use a std::unique_ptr instead.
1 parent 9346f84 commit 47db075

16 files changed

+40
-26
lines changed

src/qt/addressbookpage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode,
8383
deleteAction = new QAction(ui->deleteAddress->text(), this);
8484

8585
// Build context menu
86-
contextMenu = new QMenu();
86+
contextMenu = new QMenu(this);
8787
contextMenu->addAction(copyAddressAction);
8888
contextMenu->addAction(copyLabelAction);
8989
contextMenu->addAction(editAction);

src/qt/bantablemodel.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,19 @@ BanTableModel::BanTableModel(ClientModel *parent) :
8787
clientModel(parent)
8888
{
8989
columns << tr("IP/Netmask") << tr("Banned Until");
90-
priv = new BanTablePriv();
90+
priv.reset(new BanTablePriv());
9191
// default to unsorted
9292
priv->sortColumn = -1;
9393

9494
// load initial data
9595
refresh();
9696
}
9797

98+
BanTableModel::~BanTableModel()
99+
{
100+
// Intentionally left empty
101+
}
102+
98103
int BanTableModel::rowCount(const QModelIndex &parent) const
99104
{
100105
Q_UNUSED(parent);

src/qt/bantablemodel.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class BanTableModel : public QAbstractTableModel
4040

4141
public:
4242
explicit BanTableModel(ClientModel *parent = 0);
43+
~BanTableModel();
4344
void startAutoRefresh();
4445
void stopAutoRefresh();
4546

@@ -66,7 +67,7 @@ public Q_SLOTS:
6667
private:
6768
ClientModel *clientModel;
6869
QStringList columns;
69-
BanTablePriv *priv;
70+
std::unique_ptr<BanTablePriv> priv;
7071
};
7172

7273
#endif // BITCOIN_QT_BANTABLEMODEL_H

src/qt/bitcoingui.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1185,7 +1185,7 @@ void UnitDisplayStatusBarControl::mousePressEvent(QMouseEvent *event)
11851185
/** Creates context menu, its actions, and wires up all the relevant signals for mouse events. */
11861186
void UnitDisplayStatusBarControl::createContextMenu()
11871187
{
1188-
menu = new QMenu();
1188+
menu = new QMenu(this);
11891189
Q_FOREACH(BitcoinUnits::Unit u, BitcoinUnits::availableUnits())
11901190
{
11911191
QAction *menuAction = new QAction(QString(BitcoinUnits::name(u)), this);

src/qt/coincontroldialog.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ CoinControlDialog::CoinControlDialog(const PlatformStyle *_platformStyle, QWidge
5252
unlockAction = new QAction(tr("Unlock unspent"), this); // we need to enable/disable this
5353

5454
// context menu
55-
contextMenu = new QMenu();
55+
contextMenu = new QMenu(this);
5656
contextMenu->addAction(copyAddressAction);
5757
contextMenu->addAction(copyLabelAction);
5858
contextMenu->addAction(copyAmountAction);

src/qt/guiutil.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,8 @@ void TableViewLastColumnResizingFixer::on_geometriesChanged()
585585
* Initializes all internal variables and prepares the
586586
* the resize modes of the last 2 columns of the table and
587587
*/
588-
TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth) :
588+
TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth, QObject *parent) :
589+
QObject(parent),
589590
tableView(table),
590591
lastColumnMinimumWidth(lastColMinimumWidth),
591592
allColumnsMinimumWidth(allColsMinimumWidth)

src/qt/guiutil.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ namespace GUIUtil
149149
Q_OBJECT
150150

151151
public:
152-
TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth);
152+
TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth, QObject *parent);
153153
void stretchColumnWidth(int column);
154154

155155
private:

src/qt/overviewpage.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class TxViewDelegate : public QAbstractItemDelegate
2525
{
2626
Q_OBJECT
2727
public:
28-
TxViewDelegate(const PlatformStyle *_platformStyle):
29-
QAbstractItemDelegate(), unit(BitcoinUnits::BTC),
28+
TxViewDelegate(const PlatformStyle *_platformStyle, QObject *parent=nullptr):
29+
QAbstractItemDelegate(parent), unit(BitcoinUnits::BTC),
3030
platformStyle(_platformStyle)
3131
{
3232

@@ -119,8 +119,7 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent)
119119
currentWatchOnlyBalance(-1),
120120
currentWatchUnconfBalance(-1),
121121
currentWatchImmatureBalance(-1),
122-
txdelegate(new TxViewDelegate(platformStyle)),
123-
filter(0)
122+
txdelegate(new TxViewDelegate(platformStyle, this))
124123
{
125124
ui->setupUi(this);
126125

@@ -220,15 +219,15 @@ void OverviewPage::setWalletModel(WalletModel *model)
220219
if(model && model->getOptionsModel())
221220
{
222221
// Set up transaction list
223-
filter = new TransactionFilterProxy();
222+
filter.reset(new TransactionFilterProxy());
224223
filter->setSourceModel(model->getTransactionTableModel());
225224
filter->setLimit(NUM_ITEMS);
226225
filter->setDynamicSortFilter(true);
227226
filter->setSortRole(Qt::EditRole);
228227
filter->setShowInactive(false);
229228
filter->sort(TransactionTableModel::Date, Qt::DescendingOrder);
230229

231-
ui->listTransactions->setModel(filter);
230+
ui->listTransactions->setModel(filter.get());
232231
ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress);
233232

234233
// Keep up to date with wallet

src/qt/overviewpage.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "amount.h"
99

1010
#include <QWidget>
11+
#include <memory>
1112

1213
class ClientModel;
1314
class TransactionFilterProxy;
@@ -56,7 +57,7 @@ public Q_SLOTS:
5657
CAmount currentWatchImmatureBalance;
5758

5859
TxViewDelegate *txdelegate;
59-
TransactionFilterProxy *filter;
60+
std::unique_ptr<TransactionFilterProxy> filter;
6061

6162
private Q_SLOTS:
6263
void updateDisplayUnit();

src/qt/peertablemodel.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,24 @@ PeerTableModel::PeerTableModel(ClientModel *parent) :
114114
timer(0)
115115
{
116116
columns << tr("NodeId") << tr("Node/Service") << tr("User Agent") << tr("Ping");
117-
priv = new PeerTablePriv();
117+
priv.reset(new PeerTablePriv());
118118
// default to unsorted
119119
priv->sortColumn = -1;
120120

121121
// set up timer for auto refresh
122-
timer = new QTimer();
122+
timer = new QTimer(this);
123123
connect(timer, SIGNAL(timeout()), SLOT(refresh()));
124124
timer->setInterval(MODEL_UPDATE_DELAY);
125125

126126
// load initial data
127127
refresh();
128128
}
129129

130+
PeerTableModel::~PeerTableModel()
131+
{
132+
// Intentionally left empty
133+
}
134+
130135
void PeerTableModel::startAutoRefresh()
131136
{
132137
timer->start();

0 commit comments

Comments
 (0)