如何在c ++中的shared_ptr上实现BinarySearchTree?

时间:2014-01-02 16:42:03

标签: c++ binary-search-tree shared-ptr

我不明白如何使用shared_ptr来实现BinarySearchTree。这是我的代码。

template<class T>
class Element{
    public: 
        T value;
        shared_ptr<Element> left;
        shared_ptr<Element> right;
        Element(T value);
};

template<class T>
Element<T>::Element(T value)
{
    this.value = value;
    this.left = NULL;
    this.right = NULL;
}

template<class T>
class BinarySearchTree{



    public:
        Element<shared_ptr<T>> root;
        BinarySearchTree(T value);
        bool insert(Element<shared_ptr<T>> element);
        bool find(T element);
        bool erase(T element);
        T & min();
        T & max();
};

template<class T>
BinarySearchTree<T>::BinarySearchTree(T value)
{
    this -> root(new Element<T>(value));
}

int _tmain(int argc, _TCHAR* argv[])
{
    BinarySearchTree<int> bst(3);

    _getch();
    return 0;
}

这是我的问题:

错误C2064:术语不评估为采用1个参数的函数

错误C2512:'元素':没有合适的默认构造函数

请帮帮我。

2 个答案:

答案 0 :(得分:0)

root应该是指向元素的指针,而不是包含指针的元素

shared_ptr<Element<T>> root;

并在初始化列表中初始化它,而不是构造函数体

template<class T>
BinarySearchTree<T>::BinarySearchTree(T value) :
    root(new Element<T>(value))
{}

您应该使用unique_ptr而不是shared_ptr来强制执行树的单一所有权语义。

答案 1 :(得分:0)

考虑std::unique_ptr而不是std::shared_ptr

当所有权存在问题并且可能有多个所有者时,

std::shared_ptr是好的

std::unique_ptr更多是您的用例 - 您拥有一个已知的所有者,并希望将内存管理卸载到标准库。