Par*_*ara 0 c++ destructor linked-list
我的C++有点生疏但我已经制作了一个程序来反转链表,现在我正在尝试为它编写正确的析构函数,但我不知道究竟要销毁什么.这是我的类定义:
class LinkedList
{
private:ListElement *start;
public:LinkedList();
public:void AddElement(int val);
public:void PrintList();
public:void InvertList();
};
class ListElement
{
public:int value;
public:ListElement * link;
public:ListElement(int val);
public:ListElement();
};
class Stack
{
private:ListElement ** stack;
private:int index;
public:Stack(int size);
public:void push(ListElement * le);
public:ListElement * pop();
};
Run Code Online (Sandbox Code Playgroud)
堆栈用于反转列表时.无论如何......我将如何为这些编写析构函数?我刚在想:
对于ListElement,使值为0,链接为0(NULL).
对于LinkedList,遍历元素并为所有元素调用ListElementDestructor.
我不是很确定这一点,因为我理解析构函数会自动调用成员对象的析构函数,所以在这种情况下只能为LinkedList写一个空的析构函数吗?我不知道......这就是我要问的原因
对于堆栈,我不知道......在反转列表之后,指针已经为0(NULL),因为它们都是poped.
我有点困惑.有人可以帮忙吗?先感谢您.
小智 9
你摧毁需要毁灭的东西.如果您的类使用new创建对象,则可能需要使用析构函数删除它们的析构函数.请注意,像LinkedList这样的容器应该只包含已动态分配的元素或不包含的元素.如果您将两者混合,或混合原件和副本,我怀疑您正在做,您可能需要使用智能指针或引用计数.
其次,如果你真的需要反转一个单链表(30年的编程,我从来不需要做),你只是使用错误的数据结构 - 你应该使用双链表,在这种情况下没有必要做任何事情.
第三,我可以说你的C++风格是非惯用的,对我来说几乎是不可读的 - 使C++看起来像Java并不是一个好主意.改成:
class LinkedList
{
private:
ListElement *start;
public:
LinkedList();
void AddElement(int val);
void PrintList();
void InvertList();
};
Run Code Online (Sandbox Code Playgroud)