【问题标题】:C++ and destructors (nested classes and general questions)C++ 和析构函数(嵌套类和一般问题)
【发布时间】:2012-01-26 05:28:43
【问题描述】:

我正在用 C++ 实现二叉树。我对这门语言相当陌生,虽然我了解什么是结构和析构函数,但我不确定嵌套类/结构会发生什么。

在我的实现中,我的二进制节点有一个嵌套结构。这个结构是否需要它自己的析构函数,或者当二叉树本身的析构函数被调用时所有节点都会被删除。如果我将结构更改为类,答案是否会改变?

另外,有人告诉我,如果您在类中调用“new”,则需要在析构函数中调用“delete”。如果我在我的初始化列表中为一个类初始化一个数组(即 class:array({0})),我是否需要在我的析构函数中删除 [] 数组?

【问题讨论】:

    标签: c++ struct destructor


    【解决方案1】:

    在另一个类(或结构)中嵌套一个类(或结构)对对象的生命周期没有影响。它所做的只是为类的名称提供范围,并访问封闭类中的私有成员。所以你的树节点不会因为嵌套在树类中而被自动销毁。

    如果您希望在树本身被销毁时销毁树的节点,则需要确保树的析构函数能够做到这一点。如果您使用new 手动分配节点,请在析构函数中使用delete(或delete[])。或者,您可以使用 std::auto_ptr(或 C++11 中的 std::unique_ptr)之类的东西,它将在自己的析构函数中进行清理,因此您不必自己编写 delete 调用。

    将结构更改为类对其运行时的行为没有影响。 C++ 中结构体和类之间的唯一区别是结构体隐式以public: 开头,而类体隐式以private: 开头。

    【讨论】:

      【解决方案2】:

      对于 C++ 来说,我们不必在类/结构中定义析构函数。 如果要将结构更改为类,则析构函数没有任何更改。 但是对于编程语言来说,如果我们用 new 调用内存,我们必须自己删除它。 如果您要定义嵌套类,那么在该类中创建析构函数也很好。

      数组不需要使用for delete[]。

      【讨论】:

        猜你喜欢
        • 2018-09-08
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        相关资源
        最近更新 更多