为驳回编译器自动(暗自〉提供的机能,可将相应的成员函数声明为private 并且不予实现。使用像Uncopyable 这样的base class 也是一种做法。

     例如,要阻止类的拷贝构造函数,不去申明,但是,编译器会自动帮你申明拷贝构造函数,如何阻止该构造函数的申明呢,方法是,将该构造函数,设置为私有类型的申明,但不做定义,此时,可以省略参数名称。

但这个方法不是绝对安全。因为成员函数和友元函数还是可以调用该拷贝构造函数。除非不去定义拷贝构造函数和成员函数。更好的方法是,将该链接期出现的错误(如果有人调用拷贝构造函数)推置编译期提示,会更好,实现的方法是,专门设计一个阻止拷贝的基类,然后,我们的实际类,私有继承于该基类。

一般来说,如果一个类要被另外一个类继承,而且用其指针指向其子类对象时,如题目中的A* d = new B();(假定A是基类,B是从A继承而来的派生类),那么其(A类)析构函数必须是虚的,否则在delete d时,B类的析构函数将不会被调用,因而会产生内存泄漏和异常;  在构造一个类的对象时,先构造其基类子对象,即调用其基类的构造函数,然后调用本类的构造函数;销毁对象时,先调用本类的析构函数,然后再调用其基类的构造函数;

    任何class 只要带有virtual 函数都几乎确定应该也有一个virtual析构函数。如果class 不含virtual 函数,通常表示它并不意图被用做一个base class。当class不企图被当作base class,令其析构函数为virtual 往往是个馒主意.因为根据虚函数的C++实现机制,对象的体积会增加。许多人的心得是:只有当class 内含至少一个virtual 函数,才为它声明virtual 析构函数。

    同时,也可以用纯虚函数实现这个功能,但是,这种情况下的纯虚函数,必须要有定义。

    析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class 应该提供一个普通函数(而非在析构函数中)执行该操作。

   绝不在构造和析构过程中调用virtual 函数。

   假设有基类A已经派生出来的类B,现在B b表示定义一个类B的对象,然而,构造b时,编译器首先调用基类的构造函数A,假如构造函数A中调用了虚函数,那么,尽管b对象是类B的,但,此时类A中的构造函数调用的虚函数,还是将对象b看做是类A对象,无视其本身属性。也就是说,在这个构造期间,虚函数,不会下降到派生类,即,在此期间,虚函数,不是虚函数。同样,析构函数也是这样。

   由于在此期间,无法使用虚函数从基类下降到派生类,则可以借由派生类将必要的信息上传给基类。所以,派生类的构造函数采用初始化列表,来传递,因为初始化列表的运行在构造函数之前。

但是,比起初始化列表给基类必要信息,用一个辅助函数创建一个值传递给构造函数更方便。并设定其为静态的。

2012.4.18总结相关推荐

  1. QT学习-10/18/2012

    1.QT-使QSplitter分割线不能移动:http://cooker.iteye.com/blog/733481 m_tableSplitter = new QSplitter(Qt::Horiz ...

  2. 周报_2012第51周(2012/12/16-2012/12/22)

    2012.12.18 Windows Phone 墓碑机制(多任务) Launching和Closing方法在通常情况下使用:例如用返回键退出,或者从程序列表中启动. Activated和Deacti ...

  3. 2012年度IT博客大赛10强花落谁家暨圆满落幕

    2012年度IT博客大赛 引无数业内专家.学者.技术牛人.热心的博客推荐者.关注传播者.尤其是IT博客参赛主们,翘首以待的"2012年度十大杰出IT博客",终于在大家满怀期待和竞相 ...

  4. 2012.2.18-silverlight设计器崩溃

    先把所有与siverlight有关的silverlight,silverlightsdk,silverlight_too ,silverlight toolkit,全部卸掉,然后重装,然后启动2010 ...

  5. ssms18还原数据_SSMS 18中的静态数据屏蔽

    ssms18还原数据 In this article we are going to talk about Static Data Masking, a new feature for the SQL ...

  6. 【专知荟萃18】目标跟踪Object Tracking知识资料全集(入门/进阶/论文/综述/视频/专家,附查看)

    原创: 专知内容组 专知 2017-11-18 点击上方"专知"关注获取专业AI知识! [导读]主题荟萃知识是专知的核心功能之一,为用户提供AI领域系统性的知识学习服务.主题荟萃为 ...

  7. 软考备考-系统构架师-18-信息系统基础知识相关试题整理

    博客迁移 不恰饭的小站 说明 1 整理2009~2016年系统构架师"信息系统基础知识"题目 2 内容见文档:"考点按章节整理\第 14 章 信息系统基础知识\信息系统基 ...

  8. (2012.01.12-2012.04.01)八十二天的学习小记

    (2012.01.12-2012.04.01)八十二天的学习小记   哈哈,原来又是过了八十二个日子了,真快啊~这次发的学习小记日期记录时间有点长,回看1月份的东西,原来已经隔了八十多个日子了,对于这 ...

  9. 揭秘快速提升alexa排名的18种有效方法-#来秀美#

    如果想要提高Alexa排名,最重要的一条就是提供质量高的内容,广泛推广,提高网站访问量.另外还有一些技巧,对快速提高alexa具有一定作用,都是经过不少网站站长测试过的. 如果综合使用下面18种提高a ...

最新文章

  1. pandas使用groupby函数进行分组聚合、使用agg函数指定聚合统计计算的数值变量、并自定义统计计算结果的名称(naming columns after aggregation)
  2. Python语言编程之正则表达式模式
  3. Sense编辑器(Sense Editor)
  4. fdopen()和fileno()函数
  5. tcp ip协议笔记(1)——简单介绍
  6. C++ primer第六章6.5函数的学习 之特殊用途的语言特性
  7. Hibernate知识问答
  8. 大数据每周分享第 008 期
  9. 添加控件并处理事件(纯手写)
  10. 如何为Jupyter notebook创建R内核
  11. 常用的sql语句整理 增删改查
  12. 完美国际服务器修改器,《完美世界国际2》155虚拟一键端 el编辑器 装备在线编辑器 GM管理后台 同步最新官方客户端Build 2567...
  13. comsol和java_COMSOL java API——编译comsol模型java文件
  14. 19条优秀的编码原则
  15. vb计算机清除菜单代码,动态增减菜单用法 _VB编程语言动态增减菜单-w3school教程...
  16. 四轴飞行器基础介绍篇
  17. vsphere 添加 iscsi 存储设备
  18. ubuntu 安装咖啡壶-chemex命令详解
  19. python的if-else语法
  20. Linux 新手必会的21条命令合集

热门文章

  1. Android Sensor架构和原理分析
  2. tensorflow之tfrecord
  3. netcore之json序列化
  4. 机器人布罩_机器人防护罩的主要作用是什么?
  5. 用Python显示灰度图像的灰度直方图
  6. Android Studio的build.gradle里面的各种版本信息
  7. Python网络编程【客户端与服务器通信】
  8. First集、Follow集
  9. oracle的约束什么作用,Oracle数据库知识之约束
  10. 钉钉机器人自动回复消息_如何利用闲鱼助手,真正实现全自动消息回复,做到效率最大化...