我正在尝试弄清楚如何从这段代码中消除所有内存泄漏。我知道这个问题可能源于 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
任何帮助将不胜感激!谢谢!
最佳答案
您需要删除堆栈中的所有元素。以下是执行此操作的几种方法:
- 在您的析构函数中,遍历堆栈中的所有元素并删除它们。
- 在您的析构函数中,重复调用
pop
直到堆栈为空。
选项 2 可能更易于编码,假设您已经有一个 pop
函数,但可能效率较低,因为它将做额外的工作以确保堆栈结构在被销毁时得到维护.
关于C++ 堆栈使用模板化链表 - 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26436136/