C++和析构函数(嵌套类和一般问题)

C++ and destructors (nested classes and general questions)

本文关键字:问题 嵌套 析构函数 C++      更新时间:2023-10-16

我正在用C++实现一个二进制树。我是这门语言的新手,虽然我了解结构和析构函数是什么,但我不确定嵌套类/结构会发生什么。

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

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

将一个类(或结构)嵌套在另一个类中不会影响对象的生存期。它所做的只是提供类名的作用域,以及对封闭类中私有成员的访问。因此,树节点不会仅仅因为嵌套在树类中而被自动销毁。

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

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

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

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