zoukankan      html  css  js  c++  java
  • 在STL中处理对象指针

    STL的容器类是针对对象来进行存储管理的。虽然没有明确的限制不能在STL的容器类中包含指针,STL也不在乎您存放在容器中的对象还是指针。但仔细考虑STL的初衷,在容器类中使用指针是明显不合时宜的,而应该尽可能的直接将对象本身而不是将对象的指针放置在STL容器类中。直接在容器中存放指针一个最大的副作用就是可能导致内存泄漏。这个问题在char *类型上有突出的体现。

    但某些时候,直接使用对象指针有明显的好处,这些情况大致可以概括为如下的几个方面:

    1. 当对象十分庞大时,频繁的拷贝复制所带来的系统资源消耗十分昂贵。
    2. 当您需要将同一个对象存放到多个容器中,这种情况应该不是很少见的。
    3. 当您需要在同一个容器中存放由同一个父类派生而来的多个派生类对象。这也很常见。

    事实上,我这个星期所开发的计算程序中,正需要面对第三种情况。考虑使用STL的种种好处。我决定引入STL的list容器。 本来,使用BCB的TList对象,也可以实现同样的目的。但

    • TLsit类在对象指针的个数超过5000个时,效率会有明显的下降。
    • TList类不是类型安全的,它根本不在乎引入的对象指针是何种类型的。

    引入TList类就意味着要包含VCL.h头文件,这对我的计算模块的可移植性实在不是一件好事。

    我在做了决定之后,面临两个与stl有关的问题。

    第一个问题就是上面提到的如何在STL中处理对象的指针。我的解决方法是创建一个封装指针的类,代码如下:

    上述代码封装了一个指针。经过类PtrWrapper的封装后,您就没有必要直接使用指针了。STL容器接触的是真正的对象,只不过这个对象封装了一个特定类型的指针。下面举例说明PtrWrapper的使用。

  • 相关阅读:
    Android组件界面设计工具 DroidDraw
    ExtAspNet官方示例网站和官方论坛速度归来!
    [原创]FineUI秘密花园(四) — 页面级别的配置
    [翻译]OAuth入门指南 2. 协议工作流
    ExtAspNet v2.3.4 发布了
    [翻译]JavaScript秘密花园 Type Casting,undefined,eval,setTimeout,Auto Semicolon Insertion 全部完成PDF打包下载
    [原创]祝贺《JavaScript 秘密花园》中文翻译被官方正式采纳
    [原创]使用 Google Chart 在线服务实现软件版本发布时间线图
    [原创]ExtAspNet新春贺岁版 文件上传控件、复选框列表控件、完善布局管理、表格的行扩展列、完整的100多个中文示例、30多处BUG修正与功能增强、《ExtAspNet秘密花园》系列文章
    ExtAspNet v2.3.5 发布了
  • 原文地址:https://www.cnblogs.com/shakin/p/3714890.html
Copyright © 2011-2022 走看看