下面的代码是ms库中的一段代码:
我有个问题很困惑: 该方法返回一个智能指针,但该智能指针指向的对象是局部的,也就是说,该方法返回时,_result应该被释放!
由此导致一个问题: 返回值很可能是不确定的(如果该地址未被覆盖,返回值应该是希望的值:指向_result原来所在地址的智能指针,但这个不能保证)
大家解释一下这种写法把.
真的看不明白.....inline IXMLDOMNodePtr IXMLDOMNode::selectSingleNode ( _bstr_t queryString ) {
struct IXMLDOMNode * _result = 0;
HRESULT _hr = raw_selectSingleNode(queryString, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return IXMLDOMNodePtr(_result, false); //_result会被释放 !!!!
我有个问题很困惑: 该方法返回一个智能指针,但该智能指针指向的对象是局部的,也就是说,该方法返回时,_result应该被释放!
由此导致一个问题: 返回值很可能是不确定的(如果该地址未被覆盖,返回值应该是希望的值:指向_result原来所在地址的智能指针,但这个不能保证)
大家解释一下这种写法把.
真的看不明白.....inline IXMLDOMNodePtr IXMLDOMNode::selectSingleNode ( _bstr_t queryString ) {
struct IXMLDOMNode * _result = 0;
HRESULT _hr = raw_selectSingleNode(queryString, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return IXMLDOMNodePtr(_result, false); //_result会被释放 !!!!
解决方案 »
- MFC关于select语句
- SetWindowHookEx問題
- 在线等待中///////关于链接库问题
- 程序跑久了就出现"必须的资源无法得到的对话框",会是什么原因引起的?
- 谁有免费的7位qq号码?高分收购
- 兄弟们,怎么在DataGrid里动态帮定一个ODBC数据源
- Win32API SendMessage与PostMessage的区别?
- 如何用代码更新DateTimePicker的日期?
- MDI中,子窗口之间的切换如何响应,包括第一次打开或新建?立马结贴。
- 我已经完成了一个SDI工程,突然通知要把它改成DLL,请问改怎么办?从哪入口进行调用?
- 问一个odbc SQLBindCol 函数的问题
- 请问大家实际工作中怎样编写com程序?是用atl还是activeX?
HRESULT _hr = raw_selectSingleNode(queryString, &_result); //函数里,为_result分配地址,并赋值
return IXMLDOMNodePtr(_result, false); //_result是堆上的,不会释放
当我们说指针时,我们关心的是指针变量的值,而不是指针变量自身
_result自己当然是在栈上因此会被释放,但是,这里只要它指向的COM对象地址,也就是它的值,它自己释放与否,对系统不会造成任何问题