我需要解析一些 XML 并编写一些帮助程序。我不是 C++ 专家,实际上我在七年前用 c 编写过。所以,我想确定,我使用的方法是正确的还是不正确的:)
1)我实现了一些简单的助手,以处理异常。例如:
CComPtr<IXMLDOMElement> create_element(CComPtr<IXMLDOMDocument> xml_doc, string element_name) {
CComPtr<IXMLDOMElement> element;
HRESULT hr = xml_doc->createElement((BSTR)element_name.c_str(), &element);
if (FAILED(hr))
hr_raise("Failed to create XML element '" + element_name + "'", hr);
return element;
}
并像这样使用它:
void SomeClass::SomeMethod() {
CComPtr<IXMLDOMElement> element = xmlh::create_element(xml_doc, "test");
//..
// save xml to file
}
可以吗?我的意思是我可以将智能指针作为函数结果返回吗?这种方法没有泄漏吗?
2)我也使用一些智能指针作为类成员。像这样:
class XMLCommand {
public:
XMLCommand(std::string str_xml);
~XMLCommand(void);
protected:
CComPtr<IXMLDOMDocument> xml_doc;
}
XMLCommand::XMLCommand(string str_xml) {
xml_doc = xmlh::create_xml_doc();
}
// some methods below uses xml_doc
问题是一样的,它是否正确且没有泄漏?
谢谢。