Я обнаружил утечку памяти в своем приложении с помощью libxml ++ из-за XML-документа, в котором я заменяю корень узел. Я хорошо позаботился об удалении всех дочерних узлов, но, используя интерфейс xmlpp::Document
, я не нахожу возможности заменить корневой узел.
Это образец кода нарушения:
xmlpp::Document Doc;
Doc.create_root_node("root");
// Populate the document
// [...]
void ReplaceRootNode(const xmlpp::Element* NewRootNode)
{
// Remove all root node children
xmlpp::Element* RootNode = Doc.get_root_node();
const xmlpp::Node::NodeList Children = RootNode->get_children();
xmlpp::Node::NodeList::const_iterator itChild = Children.begin();
while (itChild != Children.end()) {
RootNode->remove_child(*itChild++);
}
// Replace root node
Doc.create_root_node_by_import(NewRootNode); // Leak: memory for previous root node is not freed
}
Решение, которое я придумал до сих пор, - отредактировать корневой узел документа, изменив его имя и атрибуты, но. Есть ли более простой способ избежать этой утечки, не связанный с редактированием имени и атрибутов предыдущего корневого узла?