gpt4 book ai didi

c++ - 问题理解 shared_ptr

转载 作者:行者123 更新时间:2023-11-30 04:33:20 25 4
gpt4 key购买 nike

我有一个:

template<class K,class V>
struct Node
{
node_ptr parent_;//node_ptr is a shared_ptr<Node<K,V>>
node_ptr& get_parent()const
{
return parent_;
}
void set_parent(node_ptr& p)
{
parent_ = p;
}
//the get set for left and right are analogical
};

我不明白为什么会这样:

auto zz = get_parent(get_parent(z));
rb_left_rotate(t,zz);

但这不是:

rb_left_rotate(t,get_parent(get_parent(z)));

通过作品我的意思是在 rb_left_rotate 里面我有:

template<class Tree_T, class Node_T>
void rb_left_rotate(Tree_T& t,Node_T& x)
{
auto y = get_right(x);
set_right(x,get_left(y));
if (get_left(y))
{
set_parent(get_left(y),x);
}
auto tmp = get_parent(x);
//y's current parrent is x
set_parent(y,tmp);//by works I mean that this line WILL NOT set x to empty
......
}

最佳答案

rb_left_rotate() 接受 Node_T 作为对非常量的引用。这样的引用只能绑定(bind)到左值,即非临时对象。 auto zz = get_parent(get_parent(z)); 创建这样一个名为 zz 的左值。另一方面,在表达式 rb_left_rotate(t,get_parent(get_parent(z))); 中,get_parent(z) 的结果是一个右值,即,一个临时值,不能绑定(bind)到对非常量的引用。

这与您使用的是智能指针无关。

关于c++ - 问题理解 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6960695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com