グラフ内にノードを作成するための次のコードがあります。静的チェックツール(カバレッジ)を実行すると、リソースリークエラーが発生します。コードを改善する方法を指摘していただければ幸いです。
class node {
public :
explicit node(std::string& name) : m_name(name) { }
void setlevel(int level)
{ m_level = level; }
private :
...
}
class graph {
public :
void populateGraph()
{
std::string nodeName = getNodeName();
/* I get error saying variable from new not freed or pointed-to in function
nc::node::node(const std::string...) */
node* NodePtr = new node(nodeName);
/* I get error saying variable NodePtr not freed or pointed-to in function
nc::node::setLevel(int) */
NodePtr->setLevel(-1);
if (m_name2NodeMap.find(nodeName) == m_name2NodeMap.end())
m_name2NodeMap[nodeName] = NodePtr;
NodePtr = NULL;
}
....
private :
std::map< std::string, node*> m_name2NodeMap;
}
delete NodePtr
で
必要だと思ったのですpopulateGraph
が、リリースするとノードdesctructor(~node
)が呼び出され、グラフからノードが削除されます。それで、私はNodePtr=NULL
それが役立つかどうかを確認するように設定しましたが、そうではありません。