Skip to content

Commit 3e258a0

Browse files
committed
[refactor] strictly follow RAII, standardize ownership & cleanup redundant initializers
1 parent 0f1b6f9 commit 3e258a0

17 files changed

+194
-124
lines changed

src/core/alpm_wrapper.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ AlpmWrapper& AlpmWrapper::instance() {
1010
return instance;
1111
}
1212

13-
AlpmWrapper::AlpmWrapper()
14-
: m_handle(nullptr), m_syncDbs(nullptr), m_initialized(false) {
13+
AlpmWrapper::AlpmWrapper() {
14+
// Member initialization is done in header file
1515
}
1616

1717
AlpmWrapper::~AlpmWrapper() {

src/core/alpm_wrapper.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@
99
#include <mutex>
1010
#include "../utils/types.h"
1111

12+
/**
13+
* @brief Singleton wrapper for libalpm (Arch Linux Package Manager library).
14+
*
15+
* Memory Management:
16+
* - m_handle: Raw pointer to libalpm handle, manually managed via initialize()/release()
17+
* - m_syncDbs: Raw pointer to libalpm list, managed by libalpm internally
18+
* - Thread-safe via m_mutex
19+
*
20+
* Note: libalpm uses C-style memory management, so smart pointers are not
21+
* directly applicable to the alpm types.
22+
*/
1223
class AlpmWrapper {
1324
public:
1425
static AlpmWrapper& instance();
@@ -34,10 +45,10 @@ class AlpmWrapper {
3445
private:
3546
AlpmWrapper();
3647

37-
alpm_handle_t* m_handle;
38-
alpm_list_t* m_syncDbs;
48+
alpm_handle_t* m_handle = nullptr;
49+
alpm_list_t* m_syncDbs = nullptr;
3950
std::mutex m_mutex;
40-
bool m_initialized;
51+
bool m_initialized = false;
4152

4253
QStringList convertDependList(alpm_list_t* deps);
4354
void searchInDatabase(alpm_db_t* db, const QString& query,

src/core/aur_helper.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
#include <memory>
1010
#include "../utils/types.h"
1111

12+
/**
13+
* @brief Helper class for interacting with the Arch User Repository (AUR).
14+
*
15+
* Memory Management:
16+
* - m_networkManager: Owned by std::unique_ptr for RAII-style cleanup
17+
* - Network replies are managed via Qt parent-child and deleteLater()
18+
*/
1219
class AurHelper : public QObject {
1320
Q_OBJECT
1421

src/core/package_manager.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ PackageManager& PackageManager::instance() {
1010

1111
PackageManager::PackageManager()
1212
: QObject(nullptr)
13-
, m_helper(Helper::Pacman)
1413
, m_process(std::make_unique<QProcess>()) {
1514

1615
detectHelper();

src/core/package_manager.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@
77
#include <memory>
88
#include <mutex>
99

10+
/**
11+
* @brief Singleton class for managing package operations (install, uninstall, update).
12+
*
13+
* Memory Management:
14+
* - m_process: Owned by std::unique_ptr for RAII-style cleanup and clear ownership
15+
* - Thread-safe via m_mutex for operation serialization
16+
*/
1017
class PackageManager : public QObject {
1118
Q_OBJECT
1219

@@ -49,9 +56,9 @@ class PackageManager : public QObject {
4956
void detectHelper();
5057
void executeCommand(const QString& command, const QStringList& args);
5158

52-
Helper m_helper;
59+
Helper m_helper = Helper::Pacman;
5360
std::unique_ptr<QProcess> m_process;
54-
std::mutex m_mutex;
61+
mutable std::mutex m_mutex;
5562

5663
private slots:
5764
void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);

src/gui/home_widget.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010

1111
class PackageCard;
1212

13+
/**
14+
* @brief Widget displaying featured packages on the home screen.
15+
*
16+
* Memory Management:
17+
* - All Qt widget members use Qt parent-child ownership (raw pointers are non-owning)
18+
* - m_packageCards contains non-owning pointers to cards owned by m_contentWidget
19+
*/
1320
class HomeWidget : public QWidget {
1421
Q_OBJECT
1522

@@ -24,11 +31,13 @@ class HomeWidget : public QWidget {
2431
void checkInstalledPackages();
2532

2633
QVector<PackageInfo> m_featuredPackages;
27-
QVector<PackageCard*> m_packageCards;
28-
QScrollArea* m_scrollArea;
29-
QWidget* m_contentWidget;
30-
QGridLayout* m_gridLayout;
31-
QTimer* m_updateTimer;
34+
QVector<PackageCard*> m_packageCards; // Non-owning pointers, owned by m_contentWidget
35+
36+
// Qt parent-child managed widgets (non-owning pointers)
37+
QScrollArea* m_scrollArea = nullptr;
38+
QWidget* m_contentWidget = nullptr;
39+
QGridLayout* m_gridLayout = nullptr;
40+
QTimer* m_updateTimer = nullptr;
3241

3342
private slots:
3443
void onPackageClicked(const PackageInfo& info);

src/gui/installed_widget.h

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
#include <QVector>
1010
#include "../utils/types.h"
1111

12+
/**
13+
* @brief Widget displaying installed packages.
14+
*
15+
* Memory Management:
16+
* - All Qt widget members use Qt parent-child ownership (raw pointers are non-owning)
17+
* - Package cards are dynamically created/destroyed in displayPackages/clearResults
18+
*/
1219
class InstalledWidget : public QWidget {
1320
Q_OBJECT
1421

@@ -25,12 +32,13 @@ class InstalledWidget : public QWidget {
2532
void filterPackages(const QString& query);
2633
void clearResults();
2734

28-
QLineEdit* m_filterInput;
29-
QScrollArea* m_scrollArea;
30-
QWidget* m_contentWidget;
31-
QGridLayout* m_gridLayout;
32-
QLabel* m_statusLabel;
33-
QLabel* m_countLabel;
35+
// Qt parent-child managed widgets (non-owning pointers)
36+
QLineEdit* m_filterInput = nullptr;
37+
QScrollArea* m_scrollArea = nullptr;
38+
QWidget* m_contentWidget = nullptr;
39+
QGridLayout* m_gridLayout = nullptr;
40+
QLabel* m_statusLabel = nullptr;
41+
QLabel* m_countLabel = nullptr;
3442

3543
QVector<PackageInfo> m_allPackages;
3644
QVector<PackageInfo> m_filteredPackages;

src/gui/mainwindow.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ class InstalledWidget;
1212
class UpdatesWidget;
1313
class SettingsWidget;
1414

15+
/**
16+
* @brief Main application window for ALG App Store.
17+
*
18+
* Memory Management:
19+
* - m_tabWidget: Owned by std::unique_ptr (central widget)
20+
* - Child widgets (m_homeWidget, etc.): Owned by Qt parent-child hierarchy
21+
* through m_tabWidget. Raw pointers are used as non-owning references.
22+
*/
1523
class MainWindow : public QMainWindow {
1624
Q_OBJECT
1725

@@ -25,11 +33,13 @@ class MainWindow : public QMainWindow {
2533
void loadStyleSheet();
2634

2735
std::unique_ptr<QTabWidget> m_tabWidget;
28-
HomeWidget* m_homeWidget;
29-
SearchWidget* m_searchWidget;
30-
InstalledWidget* m_installedWidget;
31-
UpdatesWidget* m_updatesWidget;
32-
SettingsWidget* m_settingsWidget;
36+
37+
// Non-owning pointers - owned by m_tabWidget via Qt parent-child hierarchy
38+
HomeWidget* m_homeWidget = nullptr;
39+
SearchWidget* m_searchWidget = nullptr;
40+
InstalledWidget* m_installedWidget = nullptr;
41+
UpdatesWidget* m_updatesWidget = nullptr;
42+
SettingsWidget* m_settingsWidget = nullptr;
3343
};
3444

3545
#endif // MAINWINDOW_H

src/gui/package_card.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ PackageCard::PackageCard(const PackageInfo& info, QWidget* parent)
1212
, m_descriptionLabel(new QLabel(this))
1313
, m_versionLabel(new QLabel(this))
1414
, m_repositoryLabel(new QLabel(this))
15-
, m_statusLabel(new QLabel(this))
16-
, m_isInstalled(false) {
15+
, m_statusLabel(new QLabel(this)) {
1716

1817
setupUi();
1918
checkInstallStatus();

src/gui/package_card.h

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
#include <QPushButton>
77
#include "../utils/types.h"
88

9+
/**
10+
* @brief A clickable card widget displaying package information.
11+
*
12+
* Memory Management:
13+
* - All Qt widget members use Qt parent-child ownership (raw pointers are non-owning)
14+
*/
915
class PackageCard : public QWidget {
1016
Q_OBJECT
1117

@@ -29,12 +35,15 @@ class PackageCard : public QWidget {
2935
void setupUi();
3036

3137
PackageInfo m_info;
32-
QLabel* m_nameLabel;
33-
QLabel* m_descriptionLabel;
34-
QLabel* m_versionLabel;
35-
QLabel* m_repositoryLabel;
36-
QLabel* m_statusLabel;
37-
bool m_isInstalled;
38+
39+
// Qt parent-child managed widgets (non-owning pointers)
40+
QLabel* m_nameLabel = nullptr;
41+
QLabel* m_descriptionLabel = nullptr;
42+
QLabel* m_versionLabel = nullptr;
43+
QLabel* m_repositoryLabel = nullptr;
44+
QLabel* m_statusLabel = nullptr;
45+
46+
bool m_isInstalled = false;
3847
};
3948

4049
#endif // PACKAGE_CARD_H

0 commit comments

Comments
 (0)