我不明白如何使用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:'元素':没有合适的默认构造函数
请帮帮我。
答案 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
更多是您的用例 - 您拥有一个已知的所有者,并希望将内存管理卸载到标准库。