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

时间:2012-01-26 05:28:44

标签: c++ struct destructor

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我们必须在类/ struct中定义析构函数。 如果要将struct更改为class,则析构函数中没有任何更改。 但是编程语言很好,如果我们用new调用内存,我们必须自己删除它。 如果你要定义嵌套类,那么在该类中也可以使用析构函数。

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