diff --git a/native_client/ctcdecode/ctc_beam_search_decoder.cpp b/native_client/ctcdecode/ctc_beam_search_decoder.cpp index f6ec3082..64d0e338 100644 --- a/native_client/ctcdecode/ctc_beam_search_decoder.cpp +++ b/native_client/ctcdecode/ctc_beam_search_decoder.cpp @@ -37,7 +37,8 @@ DecoderState::init(const Alphabet& alphabet, prefixes_.push_back(root); if (ext_scorer != nullptr && !ext_scorer->is_character_based()) { - auto dict_ptr = ext_scorer->dictionary->Copy(true); + // no need for std::make_shared<>() since Copy() does 'new' behind the doors + auto dict_ptr = std::shared_ptr<PathTrie::FstType>(ext_scorer->dictionary->Copy(true)); root->set_dictionary(dict_ptr); auto matcher = std::make_shared<fst::SortedMatcher<PathTrie::FstType>>(*dict_ptr, fst::MATCH_INPUT); root->set_matcher(matcher); diff --git a/native_client/ctcdecode/path_trie.cpp b/native_client/ctcdecode/path_trie.cpp index 51f75ff3..c1ad2441 100644 --- a/native_client/ctcdecode/path_trie.cpp +++ b/native_client/ctcdecode/path_trie.cpp @@ -165,9 +165,9 @@ void PathTrie::remove() { } } -void PathTrie::set_dictionary(PathTrie::FstType* dictionary) { +void PathTrie::set_dictionary(std::shared_ptr<PathTrie::FstType> dictionary) { dictionary_ = dictionary; - dictionary_state_ = dictionary->Start(); + dictionary_state_ = dictionary_->Start(); has_dictionary_ = true; } @@ -201,4 +201,4 @@ void PathTrie::print(const Alphabet& a) { printf("\n"); printf("transcript:\t %s\n", tr.c_str()); } -#endif // DEBUG \ No newline at end of file +#endif // DEBUG diff --git a/native_client/ctcdecode/path_trie.h b/native_client/ctcdecode/path_trie.h index 9b71f35b..04cbfdd5 100644 --- a/native_client/ctcdecode/path_trie.h +++ b/native_client/ctcdecode/path_trie.h @@ -39,7 +39,7 @@ public: void iterate_to_vec(std::vector<PathTrie*>& output); // set dictionary for FST - void set_dictionary(FstType* dictionary); + void set_dictionary(std::shared_ptr<FstType> dictionary); void set_matcher(std::shared_ptr<fst::SortedMatcher<FstType>>); @@ -72,7 +72,7 @@ private: std::vector<std::pair<int, PathTrie*>> children_; // pointer to dictionary of FST - FstType* dictionary_; + std::shared_ptr<FstType> dictionary_; FstType::StateId dictionary_state_; // true if finding ars in FST std::shared_ptr<fst::SortedMatcher<FstType>> matcher_;