0
我想弄清楚如何從此代碼中刪除所有內存泄漏。我知道這個問題可能源於使用new Node<T>(value)
時的push(T value)
函數,但我不知道如何解決這個問題。C++堆棧使用模板鏈接列表 - 內存泄漏
#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以外的元素被刪除? – SleuthEye 2014-10-18 03:57:21
只是FYI,'Node'不需要是模板本身;它已經可以訪問'T'類型,因爲它是'MyStack'下的嵌套類型。也就是說,'MyStack :: Node'和'MyStack :: Node'已經是不同的類型。使Node成爲一個模板是多餘的 - 除非你需要'G'與'T'不同的類型,這在這裏似乎不是這種情況。 –
cdhowie
2014-10-18 03:58:56
@SleuthEye很明顯與析構函數,但我不知道如何實現它。 – mrlatinos 2014-10-18 04:44:17