C++和析构函数(嵌套类和一般问题)
C++ and destructors (nested classes and general questions)
我正在用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[]。
相关文章:
- 嵌套for循环C++的问题(初学者)
- 嵌套While循环不起作用(C++问题)
- 超级对撞机2D阵列:生成嵌套:包装/尺寸问题
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- c++在实现模板化嵌套类时遇到问题
- 如果不是这样,我需要帮助理解这个嵌套的问题
- 嵌套的类成员变量不可访问.链表设置.V、下一个和新的问题
- 按升序对数组进行排序嵌套循环问题
- C++中嵌套在另一个 LinkedList 中的 LinkedList 整数上的回调函数问题
- 循环时嵌套有任何问题
- 这个嵌套循环C++有什么问题?
- 跳跃游戏中嵌套的循环问题
- 嵌套模板化类的问题
- 访问嵌套类中的变量时出现问题
- C++ 嵌套构造函数调用问题
- 嵌套类模板专用化问题
- C 嵌套的Coroutine破坏问题
- 嵌套模板问题C++
- C 完美的数字,带有嵌套循环问题
- 嵌套 while 循环,包含文件 c++ 问题