【发布时间】:2014-12-13 16:38:21
【问题描述】:
我试图弄清楚如何从这段代码中删除所有内存泄漏。我知道这个问题可能源于使用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
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
您希望如何删除堆栈中除
head之外的元素? -
仅供参考,
Node本身不需要是模板;它已经可以访问T类型,因为它是MyStack下的嵌套类型。也就是说,MyStack<int>::Node和MyStack<float>::Node已经是不同的类型。将Node设为模板是多余的——除非您需要G与T不同,这里似乎并非如此。 -
@SleuthEye 显然带有析构函数,但我不知道如何实现。
-
@cdhowie 哦,哇,你说得对。我什至没有意识到这一点。谢谢!
标签: c++ memory-management memory-leaks linked-list stack