在一个完美的世界中,凡是可以"合理地从无到有生成对象"的classes,都应该内含default constructors。而"必须有某些外来信息才能生成对象"的classes,则不必拥有default constructors。

class缺乏一个default constructor,使用这个class时会存在某些限制。

  1. 在产生数组的时候,没有办法为数组中的对象指定constructor自变量(通过new []创建时)。
  2. 这些class不适用于许多template-based container classes。
  3. virtual base classes如果缺乏default constructor,与之合作的将是一种惩罚。因为virtual base class constructors的自变量必须由欲产生对象的派生层次(most derived)最深的class提供。于是,一个缺乏default constructor的virtual base class,要求其所有的derived classes-无论距离多么遥远-都必须知道其意义,并且提供virtual base classes的constructors自变量。

但是,添加无意义的default construtors,也会影响classes的效率。

  1. 如果member functions必须坚持字段是否真的被初始化了,其调用者必须为测试行为付出时间代价,并为测试代码付出空间代价,因为可执行文件和程序库都变大了。万一测试结果为否定,对应的处理程序又需要一些空间代价。
  2. 如果class constructors可以确保对象的所有字段都会被正确地初始化,上述所有成本便可以免除。

所以,如果default constructors无法提供这些保证,那么最好避免让default constructor出现。虽然这可能会对classes的使用方式带来某些限制,但同时也带来一种保证:当你真的使用了这样的classes,可以预期它们所产生的对象会被完全地初始化,实现上亦富有效率

04. 非必要不提供default constructor相关推荐

  1. Default Constructor的构造操作

    文章目录 前言 一.带有默认构造器的 member class object 二.带有 Default Constructor 的 Base Class 三.带有一个 Virtual Function ...

  2. C++ Error: no appropriate default constructor available

    我定义了一个结构体,然后初始化它,结果编译报错 no appropriate default constructor available 代码如下: struct matrixXvect_func { ...

  3. 关于default constructor一个要注意的地方

    看到"深度探索C++对象模型"中关于default constructor的描述:编译器会按照成员变量的声明次序来对成员变量初始化.突然有个想法:假设类中有两个成员变量A,B,其中 ...

  4. 深度探索C++ 对象模型(3)-默认构造函数Default Constructor

    1. Default Constructor只对base class subobjects和member class objects初始化,对data member不做操作 2. 编译器构造Defau ...

  5. No primary or default constructor found for interface java.util.List

    https://blog.csdn.net/qq_39723363/article/details/84379685 springboot No primary or default construc ...

  6. JPA映射组合主键时错误:No default constructor for entity

    我们在使用JPA对历史问题处理时,会涉及到组合主键的处理.处理的思路如下: 使用@Embeddabel定义一个组合组键ID ID实现SErializable接口 声明一个protected的构造方法 ...

  7. no default constructor found either

    java.lang.IllegalStateException: No primary or single public constructor found for class com.lin.poj ...

  8. com.alibaba.fastjson.JSONException: default constructor not found. class com.srbl.mytx.domain.Locati

    com.alibaba.fastjson.JSONException: default constructor not found. class com.srbl.mytx.domain.Locati ...

  9. lombok 异常:Lombok needs a default constructor in the base class less... (Ctrl+F1) Inspe

    lombok 异常:Lombok needs a default constructor in the base class less... (Ctrl+F1) Inspe 参考文章: (1)lomb ...

  10. No default constructor for entity问题分析与解决

    No default constructor for entity问题分析与解决方法 今天遇到好几次这样的错误.解决简单,只是不愿意在犯.   org.hibernate.InstantiationE ...

最新文章

  1. 学习笔记-Redis设计与实现-跳跃表
  2. Java Web开发入门 - 第5章 Git
  3. JVM内存参数详解以及配置调优
  4. CSDN 厦门大学线下编程比赛第一题:求和(同余定理)
  5. android组件启动,Android四大组件Service之StartService启动
  6. java执行命令无返回_java运行cmd命令并获取返回信息的问题!!怎么不行了?
  7. plpythonu_PostgreSQL PL/Python 函数
  8. flash 基础语法
  9. 补习系列(12)-springboot 与邮件发送
  10. java数据结栈空的条件表达式_数据结构——栈和队列例题
  11. mysql8 错误日志_MySQL 8 服务器日志
  12. py3Fdfs 修复几个bug
  13. cas入门之:cas 4 如何以http形式发布
  14. 中国知名科幻网站列表
  15. [压位DP]Hdu 6149——Valley Numer II
  16. 《图解密码技术》笔记2:历史上的密码-写一篇别人看不懂的文章
  17. Tesseract-OCR安装与使用
  18. 免费获取ADS1299的AD原理图和封装!
  19. 计算机语言 帕斯卡,用帕斯卡语言编程
  20. Elixir-Basic types 之 Binaries、strings、charlist

热门文章

  1. 普通文件的上传(表单上传和ajax文件异步上传)
  2. 团队博客作业-Week3
  3. win7下装ubuntu双系统
  4. swift UI专项训练19 TextView 多行文本
  5. 黑马程序员——JAVA学习笔记四(继承、接口、内部类)
  6. 11月国内网站流量统计:百度夺冠 360安全中心居亚
  7. 域名解析与邮件服务器收发问题
  8. 11.看板方法---建立服务水平协议
  9. 27.go list
  10. chanlist.php,Nginx+FastCgi+Php 的工作机制