当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>在STL中处理对象指针</b>[VC/C++编程]

赞助商链接



  本文“<b>在STL中处理对象指针</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

众所周知,STL的容器类是针对对象来举行存储管理的.固然没有明确的限制不能在STL的容器类中包含指针,STL也不在乎您存放在容器中的对象还是指针.但细心考虑STL的初衷,在容器类中利用指针是明显不合时宜的.

CKER的意思是您应当尽大概的直接将对象本身而不是将对象的指针安排在STL容器类中.直接在容器中存放指针一个最大的副作用就是大概招致内存泄露.这个问题在char *范例上有突出的表现.

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

1. 当对象非常宏大时,频繁的拷贝复制所带来的系统资源损耗非常高贵.

2. 当您需求将同一个对象存放到多个容器中,这种情形应当不是很少见的.

3. 当您需求在同一个容器中存放由同一个父类派生而来的多个派生类对象.这也很常见.

事实上,CKER这个星期所开辟的计算程序中,正需求面对第三种情形.考虑利用STL的各种好处.

CKER决意引入STL的list容器.

本来,利用BCB的TList对象,也可以实现一样的目的.

TLsit类在对象指针的个数超越5000个时,效率会有明显的下降.

TList类不是范例安全的,它根本不在乎引入的对象指针是何种范例的.

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

cker做了决意之后,面对两个与stl有关的问题.

第一个问题就是上面提到的如安在STL中处理对象的指针.

CKER的办理之道是成立一个封装指针的类.

代码以下:

// 定义一个用于STL容器的指针封装类
// 因为利用STL不宜直接向容器中增添指针.
////////////////////////////////////////////////////////////////////////////////
class PtrWrapper
{
private:
X* px;//指向类X的指针
public:
file://构造及拷贝构造函数
PtrWrapper(X* x = 0) : px(x) {}
PtrWrapper(const PtrWrapper& pw) : px(pw.px) {}
file://析构函数
~PtrWrapper() {}
PtrWrapper& operator= (const PtrWrapper& pw) { px = xw.px; }
file://重载运算符()返回对象X的指针
const X* operator() () const { return px; }
X* operator() () { return px; }
};
file://重载逻辑运算符 == , < , >
bool operator== (const PtrWrapper& pw1, const PtrWrapper& pw2) {
return (pw1.operator()() && pw2.operator()()) ? *pw1() == *pw2() : false;
}
bool operator< (const PtrWrapper& pw1, const PtrWrapper& pw2) {
return (pw1() && pw2()) ? *pw1() < *pw2() : false;
}
bool operator> (const PtrWrapper& pw1, const PtrWrapper& pw2) {
return (pw1() && pw2()) ? !(*pw1() < *pw2()) : false;
}

上述代码封装了一个指针.经过类PtrWrapper的封装后,您就没有必要直接利用指针了.


  以上是“<b>在STL中处理对象指针</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .