好的,所以每个人都知道应该像瘟疫一样避免使用原始指针并更喜欢智能指针,但是这个建议在实现容器时是否适用?这就是我想要完成的:
template<typename T> class AVLTreeNode {
public:
T data;
unique_ptr<AVLTreeNode<T>> left, right;
int height;
}
Unique_ptr 可以使容器函数编写起来更加麻烦,因为我不能让多个原始指针以一种优雅的方式临时指向同一个对象。例如:
unique_ptr<AVLTreeNode<T>> rotate_right(unique_ptr<AVLTreeNode<T>> n1)
{
unique_ptr<AVLTreeNode<T>> n2 = n1->left;
n1->left = n2->right;
n2->right = n1;
// n1 must now be referenced through the longer name n2->right from now on
n2->right->recalculate_height();
n2->recalculate_height();
return n2;
}
(在这个例子中这没什么大不了的,但我可以想象它怎么会成为一个问题)。我是否应该将这些问题作为强烈暗示容器应该使用良好的 old new
、delete
和 raw 指针来实现?仅仅为了避免编写析构函数似乎非常麻烦。