dll

(原创)STL 使用注意事项 结合自身遇到的问题与网络上查找到的信息,将一些注意事项记录下来。一来避免将来犯同样的错误,二来也给大家提个醒。 1、在 DLL 中不可以将 std::string 作为函数入口参数 原因:DLL 与 EXE 的内存分配方式不一样 EXE 调用 DLL 中使用 std::string 作为参数的函数会导致内存分配泄漏

 

也谈在动态连接库中如何使用STL库

在动态连接库开发中要特别注意内存的分配与释放问题,稍不注意,极可能造成内存泄漏,从而访问出错。例如在某DLL中存在这样一段代码: extent "C" __declspec(dllexport) void ExtractFileName( const std::string& path //!< Input path and filename. , std::string& fname //!< Extracted filename with extension. ) { std::string::size_type startPos = path.find_last_of('/'); fname.assign(path.begin()+startPos+1, path.end() ); } 在DLL中使用STL对象std::string,并且在其中改变std::string的内容,即发生了内存的重分配问题,若在EXE中调用该函数会出现内存访问问题。主要是:因为DLL和EXE的内存分配方式不同,DLL中的分配的内存不能在EXE中正确释放掉。 解决这一问题的途径如下: 一般情况下:构建DLL必须遵循谁分配就由谁释放的原则,例如COM的解决方案(利用引用计数),对象的创建(QueryInterface)与释放均在COM组件内部完成。在纯C++环境下,可以很容易的实现类似方案。 在应用STL的情况下,很难使用上述方案来解决,因此必须另辟蹊径,途径有二: 1、自己写内存分配器替代STL中的默认分配器。 2、使用STLport替代系统的标准库。 其实,上述问题在VC7及以后版本中,已得到解决,注意DLL工程和调用的工程一定要使用多线程DLL库,就不会发生内存访问问题。 作者Blog:http://blog.csdn.net/eeleoxxx/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值