Нормально ли иметь следующий код в моем конструкторе для загрузки XML-документа в переменную-член - выдает вызывающей стороне, если есть какие-либо проблемы:
MSXML2::IXMLDOMDocumentPtr m_docPtr; //member
Configuration()
{
try
{
HRESULT hr = m_docPtr.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if ( SUCCEEDED(hr))
{
m_docPtr->loadXML(CreateXML());
}
else
{
throw MyException("Could not create instance of Dom");
}
}
catch(...)
{
LogError("Exception when loading xml");
throw;
}
}
На основе реализаций Скотта Майерса RAII в более эффективном C ++ он очищает, если выделяет какие-либо ресурсы, например указатели:
BookEntry::BookEntry(const string& name,
const string& address,
const string& imageFileName,
const string& audioClipFileName)
: theName(name), theAddress(address),
theImage(0), theAudioClip(0)
{
try { // this try block is new
if (imageFileName != "") {
theImage = new Image(imageFileName);
}
if (audioClipFileName != "") {
theAudioClip = new AudioClip(audioClipFileName);
}
}
catch (...) { // catch any exception
delete theImage; // perform necessary
delete theAudioClip; // cleanup actions
throw; // propagate the exception
}
}
Полагаю, я в порядке, позволяя просто генерировать исключения из CTOR, поскольку я использую умный указатель (IXMLDOMDocumentPtr).
Дайте мне знать, что вы думаете ....