例如,请考虑以下trie实现。
struct Trie: unordered_map<char, pair<bool, Trie> >
是否应该存储指向struct Trie
的指针?
struct Trie: unordered_map<char, pair<bool, Trie *> >
由于struct Trie
对象可能变得非常大,因此随着trie变大,第一个实现效率会降低吗?
这里,管理内部存储器分配&amp; Trie
的dealloc不应该是一个麻烦,所以不考虑手动new / delete
的麻烦,应该首选哪个实现?
答案 0 :(得分:5)
由于您显然有足够的C ++ 11可供使用std::unordered_map
,因此您应该强烈避免拥有原始指针。而不是pair<bool, Trie*>
,请使用pair<bool, unique_ptr<Trie>>
。
您根本无法使用第一种方法,因为std::pair
(以及所有标准库容器)要求其模板参数是完整类型,在您的情况下不是这样 - Trie
是尚未完全定义。
公开继承标准库容器通常是一个坏主意;它们不是为它而设计的,没有虚拟接口。喜欢作文。