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

时间:2014-10-18 03:52:43

标签: c++ memory-management memory-leaks linked-list stack

我正在试图弄清楚如何从此代码中删除所有内存泄漏。我知道这个问题可能源于使用push(T value)时的new Node<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 个答案:

答案 0 :(得分:1)

您需要删除堆栈中的所有元素。以下是一些方法:

  1. 在析构函数中,循环遍历堆栈中的所有元素并删除它们。
  2. 在析构函数中,重复调用pop直到堆栈为空。
  3. 选项2可能更容易编码,假设您已经有一个pop函数,但可能效率较低,因为它将进行额外的工作以确保在销毁时保持堆栈结构。