• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 在函数参数中怎样使用XML的智能指针?

在函数参数中怎样使用XML的智能指针?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了xml函数,web.xml初始化参数,webservice xml参数,xml,xml文件怎么打开等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 在函数参数中怎样使用XML的智能指针?
描述:

现在我在解析XML文件的时候,对于重复的一些部分写成了函数进行处理。函数的基本定义如下:
void MyXMLParser::Initialize(IXMLDOMElementPtr& pDOMElement) 
其中参数pDOMElement我传递的是一个XML节点的信息,不知这样的传递方式是否正确?智能指针是否需要释放?


解决方案1:

呵呵,俺以为没有什么东西是大错特错,或者大对特对的!
看下边的代码……不包括错误和异常处理
按你所说,返回的智能指针。
执行看起来一切正常,可如果你查看一下引用计数,就知道
_Connection 指针被多引用了一次,且无法释放!
class CMyADO  
{
public:
_ConnectionPtr GetConn();
BOOL CloseAndFree();
BOOL Open();
CMyADO();
virtual ~CMyADO();
_ConnectionPtr m_spADOCN;
};
BOOL CMyADO::Open()
{
HRESULT hr;
_bstr_t cn=L"Provider=SQLOLEDB.1;....";
hr=m_spADOCN.CreateInstance (L"ADODB.Connection");
m_spADOCN->Open(cn,"","",adConnectUnspecified);
return true;
}
BOOL CMyADO::CloseAndFree()
{
m_spADOCN->Close;
m_spADOCN.Release ();
return true;
}
_ConnectionPtr CMyADO::GetConn()
{
return m_spADOCN;
}
int main(int argc, char* argv[])
{
CoInitialize(NULL);
_variant_t vx;
CMyADO myAdo;
myAdo.Open();
IDispatch* pDisp=NULL;
myAdo.GetConn()->QueryInterface (IID_IDispatch,(void**)&pDisp);
pDisp->Release ();
myAdo.CloseAndFree ();
CoUninitialize();
return 0;
}

解决方案2:

返回对象指针只能使用只能指针,用原生指针是大错特错。

解决方案3:

跨函数传递对象,俺建议使用原生指针,不用智能指针,
你跟踪一下调用函数就知道为什么了
另外的建议,如果你有函数要返回对象指针,那么也建议使用原生指针。
俺在这上边吃过许多苦头

解决方案4:

用IXMLDOMElementPtr&,IXMLDOMElementPtr,IXMLDOMElement*传都可以,都不需要释放指针。IXMLDOMElement*效率高一些。

解决方案5:

You are right.
No need to release smart pointer.


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在函数参数中怎样使用XML的智能指针?

相关文章

  • 2017-06-04 DLL找不到指定的模块
  • 2017-06-05 线程引起溢出的问题!
  • 2017-06-04 100分归他了:谁能提供在VC中打开PowerPoint文件的源代码
  • 2017-06-05 DLL中怎么得到主进程的app
  • 2017-06-04 CMSChart!!!!!!!!!!!!!!!!!!!!!!!!1
  • 2017-06-05 Dll中加载ActiveX控件的问题新
  • 2017-06-05 多线程启动的问题,为什么会出错
  • 2017-06-05 用mfcshareddll做的DLL给vb用,为什么不要注册的,而且在vb中要写出完整路径????
  • 2017-06-04 VC++组件包组件的设计
  • 2017-06-04 关于在OCX的DoPropExchange里面获取IE传入的param值的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 请教高手,spreadsheet30(vc插件)能不能和并单元格,怎么合并!!
    • LocalServer,为什么不注册class也可以?coclass是不是不能指定threadingmodel?
    • ATLCOM组件里使用了MFC的CDhtmlDialog,无法找到资源问题求解。
    • 我正在做一个用twainkit控件的扫描仪程序。偶第一次用控件,请教了。
    • 如何手动添加一个接口
    • 如何从窗口handle得到进程ID?
    • 紧急求教:调用SerialPort类进行串口发送问题
    • 做ASP的COM开发,百分页写在COM里,怎么弄啊?谢谢,最好给我个例子
    • vcredist_x64在64位window2003sp2上安装不成功
    • [项目]VC达人ActiveX达人COM达人乱入

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有