Skip to content

Commit 942f7c3

Browse files
authored
feat(todo): change raw pointer to unique pointer for member variables in bustub_instance.h (#589)
feat: change raw pointer to unique pointer for member variables in bustub_instance.h
1 parent 2f2890b commit 942f7c3

File tree

2 files changed

+39
-43
lines changed

2 files changed

+39
-43
lines changed

src/common/bustub_instance.cpp

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <memory>
12
#include <optional>
23
#include <shared_mutex>
34
#include <string>
@@ -15,7 +16,6 @@
1516
#include "catalog/schema.h"
1617
#include "catalog/table_generator.h"
1718
#include "common/bustub_instance.h"
18-
#include "common/enums/statement_type.h"
1919
#include "common/exception.h"
2020
#include "common/util/string_util.h"
2121
#include "concurrency/lock_manager.h"
@@ -39,87 +39,90 @@
3939
namespace bustub {
4040

4141
auto BustubInstance::MakeExecutorContext(Transaction *txn, bool is_modify) -> std::unique_ptr<ExecutorContext> {
42-
return std::make_unique<ExecutorContext>(txn, catalog_, buffer_pool_manager_, txn_manager_, lock_manager_, is_modify);
42+
return std::make_unique<ExecutorContext>(txn, catalog_.get(), buffer_pool_manager_.get(), txn_manager_.get(),
43+
lock_manager_.get(), is_modify);
4344
}
4445

4546
BustubInstance::BustubInstance(const std::string &db_file_name) {
4647
enable_logging = false;
4748

4849
// Storage related.
49-
disk_manager_ = new DiskManager(db_file_name);
50+
disk_manager_ = std::make_unique<DiskManager>(db_file_name);
5051

5152
// Log related.
52-
log_manager_ = new LogManager(disk_manager_);
53+
log_manager_ = std::make_unique<LogManager>(disk_manager_.get());
5354

5455
// We need more frames for GenerateTestTable to work. Therefore, we use 128 instead of the default
5556
// buffer pool size specified in `config.h`.
5657
try {
57-
buffer_pool_manager_ = new BufferPoolManager(128, disk_manager_, LRUK_REPLACER_K, log_manager_);
58+
buffer_pool_manager_ =
59+
std::make_unique<BufferPoolManager>(128, disk_manager_.get(), LRUK_REPLACER_K, log_manager_.get());
5860
} catch (NotImplementedException &e) {
5961
std::cerr << "BufferPoolManager is not implemented, only mock tables are supported." << std::endl;
6062
buffer_pool_manager_ = nullptr;
6163
}
6264

6365
// Transaction (txn) related.
66+
lock_manager_ = std::make_unique<LockManager>();
6467

65-
lock_manager_ = new LockManager();
68+
txn_manager_ = std::make_unique<TransactionManager>(lock_manager_.get(), log_manager_.get());
6669

67-
txn_manager_ = new TransactionManager(lock_manager_, log_manager_);
68-
69-
lock_manager_->txn_manager_ = txn_manager_;
70+
lock_manager_->txn_manager_ = txn_manager_.get();
7071

7172
#ifndef __EMSCRIPTEN__
7273
lock_manager_->StartDeadlockDetection();
7374
#endif
7475

7576
// Checkpoint related.
76-
checkpoint_manager_ = new CheckpointManager(txn_manager_, log_manager_, buffer_pool_manager_);
77+
checkpoint_manager_ =
78+
std::make_unique<CheckpointManager>(txn_manager_.get(), log_manager_.get(), buffer_pool_manager_.get());
7779

78-
// Catalog.
79-
catalog_ = new Catalog(buffer_pool_manager_, lock_manager_, log_manager_);
80+
// Catalog related.
81+
catalog_ = std::make_unique<Catalog>(buffer_pool_manager_.get(), lock_manager_.get(), log_manager_.get());
8082

81-
// Execution engine.
82-
execution_engine_ = new ExecutionEngine(buffer_pool_manager_, txn_manager_, catalog_);
83+
// Execution engine related.
84+
execution_engine_ = std::make_unique<ExecutionEngine>(buffer_pool_manager_.get(), txn_manager_.get(), catalog_.get());
8385
}
8486

8587
BustubInstance::BustubInstance() {
8688
enable_logging = false;
8789

8890
// Storage related.
89-
disk_manager_ = new DiskManagerUnlimitedMemory();
91+
disk_manager_ = std::make_unique<DiskManagerUnlimitedMemory>();
9092

9193
// Log related.
92-
log_manager_ = new LogManager(disk_manager_);
94+
log_manager_ = std::make_unique<LogManager>(disk_manager_.get());
9395

9496
// We need more frames for GenerateTestTable to work. Therefore, we use 128 instead of the default
9597
// buffer pool size specified in `config.h`.
9698
try {
97-
buffer_pool_manager_ = new BufferPoolManager(128, disk_manager_, LRUK_REPLACER_K, log_manager_);
99+
buffer_pool_manager_ =
100+
std::make_unique<BufferPoolManager>(128, disk_manager_.get(), LRUK_REPLACER_K, log_manager_.get());
98101
} catch (NotImplementedException &e) {
99102
std::cerr << "BufferPoolManager is not implemented, only mock tables are supported." << std::endl;
100103
buffer_pool_manager_ = nullptr;
101104
}
102105

103106
// Transaction (txn) related.
107+
lock_manager_ = std::make_unique<LockManager>();
104108

105-
lock_manager_ = new LockManager();
106-
107-
txn_manager_ = new TransactionManager(lock_manager_, log_manager_);
109+
txn_manager_ = std::make_unique<TransactionManager>(lock_manager_.get(), log_manager_.get());
108110

109-
lock_manager_->txn_manager_ = txn_manager_;
111+
lock_manager_->txn_manager_ = txn_manager_.get();
110112

111113
#ifndef __EMSCRIPTEN__
112114
lock_manager_->StartDeadlockDetection();
113115
#endif
114116

115117
// Checkpoint related.
116-
checkpoint_manager_ = new CheckpointManager(txn_manager_, log_manager_, buffer_pool_manager_);
118+
checkpoint_manager_ =
119+
std::make_unique<CheckpointManager>(txn_manager_.get(), log_manager_.get(), buffer_pool_manager_.get());
117120

118-
// Catalog.
119-
catalog_ = new Catalog(buffer_pool_manager_, lock_manager_, log_manager_);
121+
// Catalog related.
122+
catalog_ = std::make_unique<Catalog>(buffer_pool_manager_.get(), lock_manager_.get(), log_manager_.get());
120123

121-
// Execution engine.
122-
execution_engine_ = new ExecutionEngine(buffer_pool_manager_, txn_manager_, catalog_);
124+
// Execution engine related.
125+
execution_engine_ = std::make_unique<ExecutionEngine>(buffer_pool_manager_.get(), txn_manager_.get(), catalog_.get());
123126
}
124127

125128
void BustubInstance::CmdDisplayTables(ResultWriter &writer) {
@@ -354,14 +357,6 @@ BustubInstance::~BustubInstance() {
354357
if (enable_logging) {
355358
log_manager_->StopFlushThread();
356359
}
357-
delete execution_engine_;
358-
delete catalog_;
359-
delete checkpoint_manager_;
360-
delete log_manager_;
361-
delete buffer_pool_manager_;
362-
delete lock_manager_;
363-
delete txn_manager_;
364-
delete disk_manager_;
365360
}
366361

367362
} // namespace bustub

src/include/common/bustub_instance.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -250,17 +250,18 @@ class BustubInstance {
250250
*/
251251
void GenerateMockTable();
252252

253-
// TODO(chi): change to unique_ptr. Currently they're directly referenced by recovery test, so
253+
// Currently the followings are directly referenced by recovery test, so
254254
// we cannot do anything on them until someone decides to refactor the recovery test.
255255

256-
DiskManager *disk_manager_;
257-
BufferPoolManager *buffer_pool_manager_;
258-
LockManager *lock_manager_;
259-
TransactionManager *txn_manager_;
260-
LogManager *log_manager_;
261-
CheckpointManager *checkpoint_manager_;
262-
Catalog *catalog_;
263-
ExecutionEngine *execution_engine_;
256+
std::unique_ptr<DiskManager> disk_manager_;
257+
std::unique_ptr<BufferPoolManager> buffer_pool_manager_;
258+
std::unique_ptr<LockManager> lock_manager_;
259+
std::unique_ptr<TransactionManager> txn_manager_;
260+
std::unique_ptr<LogManager> log_manager_;
261+
std::unique_ptr<CheckpointManager> checkpoint_manager_;
262+
std::unique_ptr<Catalog> catalog_;
263+
std::unique_ptr<ExecutionEngine> execution_engine_;
264+
/** Coordination for catalog */
264265
std::shared_mutex catalog_lock_;
265266

266267
auto GetSessionVariable(const std::string &key) -> std::string {

0 commit comments

Comments
 (0)