そのため、ノード クラスのインスタンスを保持するために、スタックのような機能 (LIFO) を備えたリンク リスト クラスを構築しています。
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()
関数 (最後の要素を削除し、前の要素をリストの最後としてリセットすることを目的としています) で、(ポインター名) スライダーが指すインスタンスで delete を呼び出しますNode class
。ただし、削除した後でも、インスタンスにアクセスしてそのメンバーを出力できます。問題があるかどうかはわかりませんが、インスタンスには、削除時にそれを指す 3 つの異なるポインターがあります。彼らです:
- ノード *スライダー;
- ノード *end;
- 前のクラス インスタンスの Node::Node *nextNode;
この時点で、質問が適切であると思います:D
削除した後もインスタンス メンバーにアクセスできる場合、適切に削除されたかどうかを確認するにはどうすればよいですか?
私のコードはメモリリークを引き起こしますか?
究極の質問は次のとおりだと思います。私は何か間違ったことをしていますか?
PSposition2df; vector2df;
ここには、Irrlicht Game Engine からの変数がいくつかあります ( )。混乱を避けるために、それを指摘したかっただけです。
この投稿が漠然としていたり、不明確だったりした場合はご容赦ください。オンラインで質問するのは得意ではありません。