diff --git a/src/Native/LdaNative/lda_engine.cpp b/src/Native/LdaNative/lda_engine.cpp index 005fe9f778..fb8610ca66 100644 --- a/src/Native/LdaNative/lda_engine.cpp +++ b/src/Native/LdaNative/lda_engine.cpp @@ -68,11 +68,11 @@ namespace lda { printf("using %d thread(s) to do train/test\n", num_threads_); bAlphaSumMultiplied = false; - atomic_stats_ = new LDAEngineAtomics(); - model_block_ = new LDAModelBlock(); - data_block_ = new LDADataBlock(num_threads_); - process_barrier_ = new SimpleBarrier(num_threads_); - samplerQueue_ = new CBlockedIntQueue(); + atomic_stats_.reset(new LDAEngineAtomics()); + model_block_.reset(new LDAModelBlock()); + data_block_.reset(new LDADataBlock(num_threads_)); + process_barrier_.reset(new SimpleBarrier(num_threads_)); + samplerQueue_.reset(new CBlockedIntQueue()); document_buffer_ = new int32_t*[num_threads_]; for (int i = 0; i < num_threads_; i++) @@ -105,11 +105,11 @@ namespace lda { num_threads_ = std::max(1, (int)(uNumCPU - 2)); } bAlphaSumMultiplied = false; - process_barrier_ = new SimpleBarrier(num_threads_); - atomic_stats_ = new LDAEngineAtomics(); - data_block_ = new LDADataBlock(num_threads_); - model_block_ = new LDAModelBlock(); - samplerQueue_ = new CBlockedIntQueue(); + process_barrier_.reset(new SimpleBarrier(num_threads_)); + atomic_stats_.reset(new LDAEngineAtomics()); + data_block_.reset(new LDADataBlock(num_threads_)); + model_block_.reset(new LDAModelBlock()); + samplerQueue_.reset(new CBlockedIntQueue()); document_buffer_ = new int32_t*[num_threads_]; for (int i = 0; i < num_threads_; i++) @@ -123,20 +123,11 @@ namespace lda { LdaEngine::~LdaEngine() { //delete memory space - delete process_barrier_; - process_barrier_ = nullptr; - - delete data_block_; - data_block_ = nullptr; - - delete atomic_stats_; - atomic_stats_ = nullptr; - - delete model_block_; - model_block_ = nullptr; - - delete samplerQueue_; - samplerQueue_ = nullptr; + process_barrier_.reset(nullptr); + data_block_.reset(nullptr); + atomic_stats_.reset(nullptr); + model_block_.reset(nullptr); + samplerQueue_.reset(nullptr); for (int i = 0; i < num_threads_; ++i) { diff --git a/src/Native/LdaNative/lda_engine.hpp b/src/Native/LdaNative/lda_engine.hpp index acda354941..887326b644 100644 --- a/src/Native/LdaNative/lda_engine.hpp +++ b/src/Native/LdaNative/lda_engine.hpp @@ -110,11 +110,11 @@ namespace lda { bool bAlphaSumMultiplied; //used to check whether alpha_sum_ is real alpha sum but not alpha std::vector word_range_for_each_thread_; - LDAEngineAtomics* atomic_stats_; - SimpleBarrier* process_barrier_; // Local barrier across threads. + std::unique_ptr atomic_stats_; + std::unique_ptr process_barrier_; // Local barrier across threads. - LDADataBlock* data_block_; - LDAModelBlock* model_block_; + std::unique_ptr data_block_; + std::unique_ptr model_block_; std::vector global_word_topic_table_; std::vector global_alias_k_v_; @@ -133,6 +133,6 @@ namespace lda { int32_t **document_buffer_; wood::xorshift_rng rng_; - CBlockedIntQueue *samplerQueue_; + std::unique_ptr samplerQueue_; }; } // namespace lda