JavaからC++に適応しようとしていますが、STL priority_queueからアイテムをpop()するときに、メモリを管理する正しい方法がわかりません。
不要になったキューから削除されたアイテムをクリーンアップするためにdeleteを使用することになっていますか?もしそうなら、どのように?そうでない場合は、なぜですか?
私はpriority_queue(以下のコード)の使用方法を学ぶための小さなプログラムを自分で作成しました。このプログラムでは、メモリリークが発生しても大した問題ではありません。これは、非常に小規模で、すぐに終了するためです。しかし、メモリリークなしではるかに大きなキューを正しく処理するプログラムを作成できるように、正しい方法を学びたいと思っています。
私が理解していないのは、これです。top()は、ポインターではなく参照を返します。しかし、参照で削除を使用することはできませんか?
誰かが私をここで正しい方向に向けることができますか?
--------------------
struct PathCost{
int dest;
int cost;
PathCost(int _dest, int _cost){
dest = _dest;
cost = _cost;
}
bool operator<(PathCost other) const;
bool operator>(PathCost other) const;
};
bool PathCost::operator<(PathCost other) const{
return cost < other.cost;
}
bool PathCost::operator>(PathCost other) const{
return cost > other.cost;
}
int main(){
PathCost pc = PathCost(1, 2);
pc = PathCost(3, 4);
PathCost* pcp = new PathCost(5, 6);
delete pcp;
priority_queue<PathCost,
vector<PathCost>,
greater<vector<PathCost>::value_type> > tentativeQ;
cout << "loading priority queue ...\n";
tentativeQ.push(PathCost(8, 88));
tentativeQ.push(PathCost(5, 55));
tentativeQ.push(PathCost(7, 77));
tentativeQ.push(PathCost(4, 44));
cout << "\nlist items on queue in priority order ...\n";
while (!tentativeQ.empty()){
pc = tentativeQ.top();
cout << "dest:" << pc.dest << " cost:" << pc.cost << endl;
tentativeQ.pop();
/* DO I NEED TO DO MEMORY CLEANUP AT THIS POINT? */
}
}