设为首页 加入收藏

TOP

goto的好处(二)
2014-11-24 00:04:17 来源: 作者: 【 】 浏览:47
Tags:goto 好处
ument3 *pXMLDoc = NULL;

IXMLDOMParseError * pObjError = NULL;

BSTR bstr = NULL;

VARIANT_BOOL status;

VARIANT vSrc;

CoInitialize(NULL);

hr = CoCreateInstance(CLSID_DOMDocument40,

NULL,

CLSCTX_INPROC_SERVER,

IID_IXMLDOMDocument3,

(void**)&pXMLDoc);

if (FAILED(hr))

{

printf("Failed to CoCreate an instance of an XML DOM\n");

printf("Error code: %x\n", hr);

goto clean;

}

hr = pXMLDoc->put_async(VARIANT_FALSE);

if (FAILED(hr))

{

printf("Failed to set async property\n");

goto clean;

}

hr = pXMLDoc->put_validateOnParse(VARIANT_FALSE);

if (FAILED(hr))

{

printf("Failed to set validateOnParse\n");

goto clean;

}

hr = pXMLDoc->put_resolveExternals(VARIANT_FALSE);

if (FAILED(hr))

{

printf("Failed to disable resolving externals.\n");

goto clean;

}

VariantInit(&vSrc);

V_BSTR(&vSrc) = SysAllocString(L"stocks.xml");

V_VT(&vSrc) = VT_BSTR;

hr = pXMLDoc->load(vSrc, &status);

if(status!=VARIANT_TRUE)

{

hr = pXMLDoc->get_parseError(&pObjError);

hr = pObjError->get_reason(&bstr);

printf("Failed to load DOM from books.xml. %S\n",bstr);

goto clean;

}

hr = pXMLDoc->get_xml(&bstr);

printf("stocks.xml:\n%S\n", bstr);

clean:

if (bstr)

SysFreeString(bstr);

if (&vSrc)

VariantClear(&vSrc);

if (pObjError)

pObjError->Release();

if (pXMLDoc)

pXMLDoc->Release();

CoUninitialize();

return 0;

}

使用goto后,指针集中释放,即使出现内存泄露也很容易发现,而且指针空间的释放都

只出现了1次-------出错易排查。

借那句经典的话吧:goto少用、慎用,但是不能禁用。

摘自 lingxiu0613的专栏

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言的另类结构体赋值 下一篇关于C函数声明与定义返回类型不一..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: