当前位置: 首页 > news >正文

顺德手机网站建设网站备案 幕布

顺德手机网站建设,网站备案 幕布,企业管理方案,辽宁工程招标网信息平台我们知道,有时会让一个基类指针指向用 new 运算符动态生成的派生类对象(类似接口的作用);同时,用 new 运算符动态生成的对象都是通过 delete 指向它的指针来释放的。如果一个基类指针指向用 new 运算符动态生成的派生类…

我们知道,有时会让一个基类指针指向用 new 运算符动态生成的派生类对象(类似接口的作用);同时,用 new 运算符动态生成的对象都是通过 delete 指向它的指针来释放的。如果一个基类指针指向用 new 运算符动态生成的派生类对象,而释放该对象时是通过释放该基类指针来完成的,就可能导致程序不正确。

比如,我们有一个钟表的基类 TimeKeeper用来计时,而我们又有原子钟、水钟、腕表等一系列子类,根据工厂模式,我们可以定义一个 getAtomicClock函数来获得一个原子钟指针,然后用基类指针TimeKeeper来指向它们,其他子类也是同理,这个TimeKeeper就相当于一个接口

#include <iostream>
using namespace std;class TimeKeeper
{
public:TimeKeeper() {};~TimeKeeper() { cout << "TimeKeeper::destrutor" << endl; }
};// 原子钟
class AtomicClock : public TimeKeeper
{~AtomicClock(){ cout << "AtomicClock::destrutor" << endl; }
}; 
class WaterClock : public TimeKeeper {}; // 水钟
class WristClock : public TimeKeeper {}; // 腕表TimeKeeper* getAtomicClock()
{return new AtomicClock;
}TimeKeeper* getWaterClock()
{return new WaterClock;
}TimeKeeper* getWristClock()
{return new WristClock;
}int main() {TimeKeeper* ptk = getAtomicClock();delete ptk;ptk = getWaterClock();ptk = getWristClock();
}

如上面代码所示,我们的三个工厂函数都是用的基类来指向的,因为我们用的 new 来创建对象,所以自然要用 delete 释放掉,可是问题来了,我们的ptk指针是用基类指向子类对象,那么我们释放的时候是调用基类的析构还是子类的析构函数呢?答案是调用基类的析构!因为这里是静态联编,在运行之前,编译器只知道ptk是 TimeKeeper类型的,自然是调用基类的析构,但是我们实例化的是一个子类啊,你调用基类的析构,那子类中万一有一些基类没有的元素呢?那岂不是没有被析构造成内存泄漏了?

因此,为了解决这个问题,就轮到了virtual析构函数的出场了,我们只需要将基类的析构函数声明为虚析构即可!

virtual ~TimeKeeper() { cout << "TimeKeeper::destrutor" << endl; }

发现基类和子类的析构函数都被调用了!所以我们记住:问题的关键在于在实现多态的时候,堆区的内存可能会泄露,这是要用虚析构!

如果是引用的话,哪怕是多态不在堆区就不需要虚析构了:

AtomicClock ac;
TimeKeeper& ptk = ac;

程序结束的时候,依然会调用基类和子类的析构函数:

最后让我们再记一条原则:类的设计目的如果不是作为基类使用,或者不是为了具备多态性,就不该声明虚析构函数!

http://www.yayakq.cn/news/281166/

相关文章:

  • 如何将视频添加到网站上网站建设需要的技术路线
  • 网站腾讯qq对话框怎么做企业网站找谁做
  • 电子商务网站建设与运营方向网站的竞价怎么做
  • 网站地图seo旅游网站首页制作
  • 商城网站建设软件做数学的网站
  • 开淘宝店和自己做购物网站哪个好wordpress多站点换域名
  • 策划与设计一个电子商务网站网站本地环境搭建软件
  • 国内做的好的游艇网站站长之家源码下载
  • 网页设计与网站建设中的热点辽宁营商建设局网站
  • 东铁匠营网站建设做网站常用的插件
  • 外贸大型门户网站建设wordpress数据库删除
  • 做ic芯片的要去哪个网站青柠影院免费观看电视剧高清8
  • wordpress文件详情网站优化 pdf
  • 制作网站设计作品分类信息网站建设专职
  • 广州网站运营专业乐云seo平湖建设局网站
  • 好的网站和网页有哪些网站开发费用成本表
  • 上海中学门户网站登陆扬州房产网
  • 内蒙古住房与城乡建设厅网站福永电子烟网站开发
  • 旅游 网站建设目标济南手机建站价格
  • 网站建设的技术有哪些方面教育学校网站建设
  • 杭州网站建设 巴零app展示网站
  • 好网站建设彩票网站开发解决方案
  • 兴义市建设局网站河北定制网站建设产业
  • 网站后台乱码网店推广渠道
  • 网站建设管理和维护html模板怎么用
  • 简单 网站设计广东网站建设电话咨询
  • 网站开发有几种语言什么是网络营销评价
  • 苏州工业园区两学一做网站如何在各个购物网站之间做差价
  • asp与sql网站建设中国电信商圈经验分享
  • flash网站首页湛江网站建设制作维护