当我实现包含节点的堆栈的pop()和析构函数时,我应该在删除节点本身之前删除节点->数据还是应该只删除节点并让创建节点->数据的调用者删除节点->数据?如果让调用者这样做,调用者应该何时以及如何删除数据?它应该以这种方式调用:{data = stack.top(); 删除数据;stack.pop();}?
我没有看到任何删除 node->data 的代码,无论是在 pop() 的实现中还是在调用者函数中。这就是为什么我很困惑。
在这里我复制了我使用链接列表实现的堆栈。请看一下我的问题的 pop() 和 ~stack() 的注释。谢谢你的帮助。
typedef struct Node_t{
struct Node_t* next;
void* data;
}Node;
class stack {
public:
stack(): _head(null), _size(0){}
~stack();
void push(void* data);
void pop();
void* top();
bool empty();
stack(const stack& original);
stack& operator=(const stack& original);
private:
Node* _head;
int _size;
};
stack::~stack{
Node* next = null;
while(_head){
next = _head->next;
//should delete _head->_data???
delete _head;
_head = next;
}
_size = 0;
}
void stack::push(void* data){
Node* elem = new Node;
elem->data = data;
elem->next = _head;
_head = elem;
_size++;
}
void stack::pop(){
Node* next = NULL;
if (_head) {
next = _head->next;
//should delete _head->_data???
delete _head;
_head = next;
_size--;
}
}
void* stack::top() const{
if (_head) {
return _head->_data;
}
}
bool stack::empty(){
if(_size>0) return false;
else return true;
}