所以我正在构建一个链表类,具有类似堆栈的功能(LIFO),以保存 Node 类的实例:
enum Sides{NorthWest=0, North=1, NorthEast=2, West=3, East=4, SouthWest=5, South=6, SouthEast=7};
class Node
{
public:
Node(position2df pos, int id):nextNode(NULL)
{
position=pos;
ID=id;
}
~Node(){}
position2df getPosition(){return position;}
int getID(){return ID;}
void setPeripheralID(Sides side, int id){peripheralID[side]=id;}
int getPeripheralID(Sides side){return peripheralID[side];}
Node *nextNode;
private:
position2df position;
int ID;
int peripheralID[8];
};
class NodeList
{
public:
NodeList()
{
root=NULL;
end=NULL;
}
~NodeList(){}
/// Function for adding elements to the list.
void push(position2df pos, int id)
{
if(root==NULL)
{
root=new Node(pos, id);
end=root;
}
else
{
Node *newend=new Node(pos, id);
end->nextNode=newend;
end=end->nextNode;
}
}
/// Function for removing objects from the list.
Node *pop()
{
slider=root;
Node *previous;
Node *next=slider;
for(previous=NULL; next!=NULL; next=slider->nextNode)
{
previous=slider;
slider=next;
}
delete slider;
end=previous;
cout << "Can still access deleted object: " << (*slider).getID() << endl;
return end;
}
private:
Node *root;
Node *end;
Node *slider;
};
在NodeList::Node *pop()
函数中(其目的是删除最后一个元素并将前一个元素重置为列表的末尾),我在Node class
(指针名称)滑块指向的实例上调用 delete。但是,即使在删除它之后,我仍然可以访问该实例并输出它的成员。我不知道这是否重要,但实例在删除时有三个不同的指针指向它。他们是:
- 节点*滑块;
- 节点 *end;
- 前一个类实例的 Node::Node *nextNode;
我想此时有一个问题是有序的:D
如果删除后仍然可以访问实例成员,我如何知道它是否被正确删除?
我的代码会导致内存泄漏吗?
我想最终的问题是:我做错了什么吗?
PS这里有几个变量 ( position2df; vector2df;
) 来自 Irrlicht 游戏引擎。只是想指出这一点以避免任何混淆。
如果我对这篇文章含糊不清或不清楚,请原谅我,但在网上提问时我不是很熟练。