我以一種非常糟糕的方式使用rapidXML獲取配置文件的值。RapidXML NULL指針
xml_document<> doc;
doc.parse<parse_full>(buffer);
int a = atoi(doc.first_node("master")->first_node("profile")->first_node("width")->value());
如果節點不存在「first_node」返回0,所以「 - > value()」崩潰。返回一個新的xml_node將會修復崩潰,但是內存泄漏又如何呢?
這是rapidXML的fonction與新老而歸:
xml_node<Ch> *first_node(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
{
if (name)
{
if (name_size == 0)
name_size = internal::measure(name);
for (xml_node<Ch> *child = m_first_node; child; child = child->next_sibling())
if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive))
return child;
return new xml_node<Ch>(node_document);
//return 0;
}
else
return m_first_node;
}
您應該檢查鏈中的每個節點,而不是將庫更改爲返回新的空節點。這將_will_創建內存泄漏。 –
我不想檢查每個節點到達下一個之前存在。我希望能夠縮短如下行:doc.first_node(「master/profile/width」).value()而不檢查是否有空指針。你覺得這更友好嗎?另外,我如何避免內存泄漏。新創建的元素如何自動銷燬? – Naster
爲避免內存泄漏,您應該查看[智能指針](http://en.cppreference.com/w/cpp/memory)。 –