代码之家  ›  专栏  ›  技术社区  ›  Anand

C++中的二叉树

  •  3
  • Anand  · 技术社区  · 15 年前

    我希望使用引用实现一个二叉树,而不是使用指针(这通常是你在互联网上的每一本书和每一个网站上都能找到的)。我尝试了以下代码:

    class tree_node {
    private:
        tree_node& left;
        tree_node& right;
        data_type data;
    public:
        void set_left(tree_node&);
        // ... other functions here
    };
    
    void tree_node::set_left(tree_node& new_left) {
        this.left = new_left;
    }
    

    我得到以下错误: 错误C2582:“operator=”函数在“tree\u node”中不可用。

    我知道我可以很容易地实现它使用指针,但我想保持我的解决方案优雅和自由的指针。你能告诉我哪里出了问题吗?

    5 回复  |  直到 7 年前
        1
  •  4
  •   James McNellis    15 年前

    1 ;一旦初始化引用,它总是引用初始化时使用的对象。

    能够 显式地调用对象的析构函数,然后在赋值操作符实现中使用placement new,但那只是一团乱!

        2
  •  2
  •   JoshD    15 年前

        3
  •  2
  •   Steve Jessop    15 年前

    int i = 3;
    int j = 4;
    int &ref = i;
    ref = j;
    std::cout << i << "\n"; // prints 4: i itself has been modified, 
                            // because semantically ref *is* i
    

    也就是说, ref = j 具有与相同的效果 i = j ,或与 *ptr = j ,如果你先做的话 int *ptr = &i; . 意思是“复制对象的内容 j ,变成任何物体 ref 指”。

    一生 裁判 ,它总是指 i

    引用数据成员也是如此,只是它们的生存期不同于自动变量。

    this.left = new_left ,那是什么 方法 new_left this.left 指”。这(a)不是你的意思,因为你希望重新就座 这个。左边

    是(b)导致了您看到的编译器错误,尽管(a)是您应该为此使用指针的原因。

        4
  •  1
  •   Mark Ransom    15 年前

    C++中的引用与其他语言中的引用不一样。一旦在构建时设置了引用,就不能将其更改为其他任何内容。

        5
  •  1
  •   Christopher Hunt    15 年前

    shared_ptr 类而不是引用。这将使您不必担心如何管理指针的释放。你也可能对 Boost's graph library