04. 非必要不提供default constructor
在一个完美的世界中,凡是可以"合理地从无到有生成对象"的classes,都应该内含default constructors。而"必须有某些外来信息才能生成对象"的classes,则不必拥有default constructors。
class缺乏一个default constructor,使用这个class时会存在某些限制。
- 在产生数组的时候,没有办法为数组中的对象指定constructor自变量(通过new []创建时)。
- 这些class不适用于许多template-based container classes。
- 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的效率。
- 如果member functions必须坚持字段是否真的被初始化了,其调用者必须为测试行为付出时间代价,并为测试代码付出空间代价,因为可执行文件和程序库都变大了。万一测试结果为否定,对应的处理程序又需要一些空间代价。
- 如果class constructors可以确保对象的所有字段都会被正确地初始化,上述所有成本便可以免除。
所以,如果default constructors无法提供这些保证,那么最好避免让default constructor出现。虽然这可能会对classes的使用方式带来某些限制,但同时也带来一种保证:当你真的使用了这样的classes,可以预期它们所产生的对象会被完全地初始化,实现上亦富有效率。
04. 非必要不提供default constructor相关推荐
- Default Constructor的构造操作
文章目录 前言 一.带有默认构造器的 member class object 二.带有 Default Constructor 的 Base Class 三.带有一个 Virtual Function ...
- C++ Error: no appropriate default constructor available
我定义了一个结构体,然后初始化它,结果编译报错 no appropriate default constructor available 代码如下: struct matrixXvect_func { ...
- 关于default constructor一个要注意的地方
看到"深度探索C++对象模型"中关于default constructor的描述:编译器会按照成员变量的声明次序来对成员变量初始化.突然有个想法:假设类中有两个成员变量A,B,其中 ...
- 深度探索C++ 对象模型(3)-默认构造函数Default Constructor
1. Default Constructor只对base class subobjects和member class objects初始化,对data member不做操作 2. 编译器构造Defau ...
- 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 ...
- JPA映射组合主键时错误:No default constructor for entity
我们在使用JPA对历史问题处理时,会涉及到组合主键的处理.处理的思路如下: 使用@Embeddabel定义一个组合组键ID ID实现SErializable接口 声明一个protected的构造方法 ...
- no default constructor found either
java.lang.IllegalStateException: No primary or single public constructor found for class com.lin.poj ...
- 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 ...
- 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 ...
- No default constructor for entity问题分析与解决
No default constructor for entity问题分析与解决方法 今天遇到好几次这样的错误.解决简单,只是不愿意在犯. org.hibernate.InstantiationE ...
最新文章
- 学习笔记-Redis设计与实现-跳跃表
- Java Web开发入门 - 第5章 Git
- JVM内存参数详解以及配置调优
- CSDN 厦门大学线下编程比赛第一题:求和(同余定理)
- android组件启动,Android四大组件Service之StartService启动
- java执行命令无返回_java运行cmd命令并获取返回信息的问题!!怎么不行了?
- plpythonu_PostgreSQL PL/Python 函数
- flash 基础语法
- 补习系列(12)-springboot 与邮件发送
- java数据结栈空的条件表达式_数据结构——栈和队列例题
- mysql8 错误日志_MySQL 8 服务器日志
- py3Fdfs 修复几个bug
- cas入门之:cas 4 如何以http形式发布
- 中国知名科幻网站列表
- [压位DP]Hdu 6149——Valley Numer II
- 《图解密码技术》笔记2:历史上的密码-写一篇别人看不懂的文章
- Tesseract-OCR安装与使用
- 免费获取ADS1299的AD原理图和封装!
- 计算机语言 帕斯卡,用帕斯卡语言编程
- Elixir-Basic types 之 Binaries、strings、charlist