【发布时间】:2012-08-13 21:26:12
【问题描述】:
我需要解析一些 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
问题是一样的,它是否正确且没有泄漏?
谢谢。
【问题讨论】:
-
HRESULT hr = xml_doc->createElement((BSTR)element_name.c_str(), &element);=>(BSTR)element_name.c_str()对我来说看起来很可疑..BSTR基于带有长度前缀的WCHAR.. 而element_name是string,通常使用char..
标签: c++ visual-c++ smart-pointers msxml