`
izuoyan
  • 浏览: 8946679 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

当template 遭遇dynamic link

阅读更多
当template 遭遇dynamic link

template 是个好东西啊 . 经典的 stl . 强悍的boost. 还有我自己写的那个 ------- 该死的 ------- 资源管理器.
dynamic link也是个好东西啊. 在windows下叫dll, 在unix下叫so (share object) . 它能省下很多重新发布软件带来的麻烦.

但是当template 遭遇到dynamic link 时候, 很多时候却是一场恶梦.
现在来说说一部分我已经碰到过的问题. 问题主要集中在内存分配上.
1>
拿STL来说, 自己写模板的时候,很难免就用到stl. stl的代码都在头文件里. 那么表示着内存分配的代码.只有包含了它的cpp 编译的时候才会被决定是使用什么样的内存分配代码. 考虑一下: 当你声明了一个vector<> . 并把这个vector<>交给一个 dll里的代码来用. 用完后, 在你的程序里被释放了. 那么如果你 在dll里往vector里insert了一些东西. 那么这个时候insert 发生的内存分配的代码是属于dll的. 你不知道这个dll的内存分配是什么. 是分配在哪里的. 而这个时候.释放那促的动作却不在dll里.....同时. 你甚至无法保证编译dll的那个家伙使用的stl版本和你是完全一样的..>
如此说来, 程序crash掉是天经地义的....
对策: 千万别别把你的stl 容器,模板容器在 dll 间传来传去 . 记住string也是....

2>
你在dll的某个类里声明了一个vector之类的容器. 而没有显式的写这个类的构造和析构函数. 那么问题又来了.
你这个类肯定有操作这vector的函数. 那么这些函数会让vecoter<>生成代码. 这些代码在这个dll里都是一致的. 但是别忘了.你没有写析构函数...... 如果这个时候, 别人在外面声明了一个这样的类.然后调用这个类的函数操作了这个vector( 当然使用者并不知道什么时候操作了vector) . 它用完了这个类以后. 类被释放掉了. 编译器很负责的为它生成了一份析构函数的代码...... 听好了.这份代码并不是在 dll里 ... . 事情于是又和1>里的一样了.... crash ......(可能还会伴随着迷茫.....)
对策: 记得dll里每个类,哪怕式构造析构函数式空的. 也要写到cpp里去. 什么都不写也式很糟糕的.....同时,更要把任何和内存操作有关的函数写到 .cpp 里...

3>
以上两个问题似乎都是比较容易的-----只要把代码都写到cpp里去, 不要用stl容器传来传去就可以了.
那么第三个问题就要麻烦的多.
如果你自己写了一个模板, 这个模板用了stl 容器..........
这个时候你该怎么办呢?
 显然你无法把和内存分配相关的函数都写到.cpp里去 . template的代码都必须放到header file里.....
对策: 解决这个问题的基本做法是做一个stl 内存分配器 , 强制把这个模板里和内存分配相关的放到一个.cpp里去.这个时候编译这个cpp就会把内存分配代码固定在一个地方: 要么是dll. 要么是exe里...

模板+动态链接库的使用问题还很多. 要千万留心这个陷阱遍地的东西啊.....
分享到:
评论

相关推荐

    电脑游戏及系统必备运行库

    它包括了STL(Standard Template Library,标准模板库)、RTL(Runtime Library,运行时库)和DLL(Dynamic Link Library,动态链接库)等组件。C++运行时库为C++程序提供了内存管理、异常处理、多线程等关键功能。...

    Dreamweaver CS4 黄金插件10-02

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Dreamweaver CS4 黄金插件10-05

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Dreamweaver CS4 黄金插件10-1

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Dreamweaver CS4 黄金插件10-03

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Dreamweaver CS4 黄金插件10-04

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Dreamweaver CS4 黄金插件10-08

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Dreamweaver CS4 黄金插件10-06

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Dreamweaver CS4 黄金插件10-07

    57. DwZone Dynamic Sort Table V1.1.0 For Adobe Dreamweaver 58. DwZone Multi Column Combo Box V1.1.7 For Adobe Dreamweaver 59. DwZone Professional Query Manager V1.5.4 For Adobe Dreamweaver 60. DwZone ...

    Professional.MFC.with.VC6

    Chapter 12: Creating Dynamic-link Libraries Libraries Dynamic-link Libraries Architectural Decisions Initializing a DLL Coding with DLLs A Bit of History Building A DLL Easing the Build Process...

    COM实验报告.pdf

    2 图 2 新建 ATL 工程 图 3 选择 DLL 说明: Dynamic Link Library (DLL) 表示建立一个 DLL 的组件程序。 Executable (EXE) 表示建立一个 EXE 的组件程序。 Service (EXE) 表示建立一个服务程序,系统启动后就会...

    Google C++ Style Guide(Google C++编程规范)高清PDF

    This can be used to keep your template definitions easy to read. Do not forget that a -inl.h file requires a #define guard just like any other header file. Function Parameter Ordering link ▶When...

    数据结构Advanced-Data-Structures

    Dynamic array 95 Hashed array tree 98 Gap buffer 99 Circular buffer 101 Sparse array 111 Bit array 112 Bitboard 117 Parallel array 121 Lookup table 123 Lists 129 Linked list 129 XOR linked list 145 ...

    Visual C++ 编程资源大全(英文源码 DLL)

    07.zip Handling VB strings (as part of an array of UDT) VB的串句柄(5KB)&lt;END&gt;&lt;br&gt;8,08.zip Class for Dynamic DLL Loading 动态装入DLL的一个类(6KB)&lt;END&gt;&lt;br&gt;9,pop3.zip CPop3Connection - an ...

    WordPress 3 Plugin Development Essentials.pdf

    Making our link dynamic 55 Adding a button template 57 Getting the post URL 58 In your browser—getting the post URL 60 Getting the post title 60 Getting the description 60 Getting the media ...

    dreamweaver的各种组件

    Faux Page Template 一个很好用的模板,您可以直接生成固定风格的网页! Assorted Queries 外国高人编写的一些Dreamweaver查寻找条件文件,使用方法同使用Object一样,将其释放至Configuration &gt; Queries文件夹下概...

    Multiprocessor+Systems-on-Chips

    7.4.2 Communication Architecture Template Customization 204 7.5 Adaptive Communication Architectures 210 7.5.1 Communication Architecture Tuners 210 7.6 Communication Architectures for Energy/Battery-...

    A&amp;H IDR-8音频处理器说明

    Furthermore, the 8-buss link can be used to distribute signals around a complex network where iDR units communicate via TCP/IP - here, interbox paging and routing is possible. Audio Quality Low ...

    数位板压力测试

    • Tablets often control the system cursor, provide additional digitizing input, and provide template or macro functions. 1.2 The Windows Environment Programming for tablets in the Windows ...

    python3.6.5参考手册 chm

    Python参考手册,官方正式版参考手册,chm版。以下摘取部分内容:Navigation index modules | next | Python » 3.6.5 Documentation » Python Documentation contents What’s New in Python ...

Global site tag (gtag.js) - Google Analytics