使用模板链表的C++堆栈-内存泄漏



我正试图找出如何从这段代码中删除所有内存泄漏。我知道这个问题可能源于使用new Node<T>(value)时的push(T value)函数,但我不知道如何解决这个问题。

#ifndef MYSTACK_H
#define MYSTACK_H 
#include <stdexcept>
using namespace std;

template <class T> class MyStack{
template <class G> class Node{
  public:
  G value;
  Node* next;
  Node(T val, Node* n = NULL): value(val), next(n){};
};
public:
  MyStack(){
    head = NULL; 
    tail = NULL;
    my_size = 0;
  };
  ~MyStack(){
    delete head;
  }
  void push(T value){
    if(head == NULL){
      head = new Node<T>(value);
      tail = head;
      my_size++;
    }
    else{
      Node<T> *temp = new Node<T>(value);
      temp->next = head;
      head = temp;
      my_size++;      
    }
  }
// . . . (removed - brevity)
private:
  unsigned int my_size;
  Node<T> *head;
  Node<T> *tail;
};
#endif

任何帮助都将不胜感激!谢谢

您需要删除堆栈中的所有元素。这里有几种方法可以做到这一点:

  1. 在析构函数中,循环遍历堆栈中的所有元素并删除它们
  2. 在析构函数中,重复调用pop,直到堆栈为空

假设您已经有了pop函数,选项2的代码可能更简单,但可能效率较低,因为它将做额外的工作来确保堆栈结构在销毁时得到维护。

相关内容

  • 没有找到相关文章

最新更新