关于c++构造函数的问题
A *pnt1 = new A;A *pnt2 = new A();这两个调用是有区别的。如果``class A``定义了一个默认构造函数的话,那么这两句没有区别。否则,上面一句调用就不会初始化普通类型(int, double之类的POD类型)值;而下面一句就会用默认值初始化它们。Reference:Do the parentheses after the type name make a difference with new?
■网友
编译器并不总是产生默认构造函数,也不是所有产生的默认构造函数都是non-trivial的。具体参见《深度探索C++对象模型》
■网友A *pnt1 = new A; A *pnt2 = new A(); 对于C++03标准来说,new A()一定是进行值初始化(value initialize),分为3种情况,如下: 1. 如果A是标量类型(例如:bool,int,char,double,指针)的话,A进行的是zero-initialize,也就是用0来初始化; 2. 如果A是非POD的普通类类型的话,则A()调用默认构造函数来进行初始化。 3. 如果A是POD类类型,通常编译器不会为A生成默认构造函数,那么A()值初始化时,其数据成员分别进行值初始化(联系1)。 对于 new A 来说,情况如下: 1. 如果A是标量类型(例如:bool,int,char,double,指针)的话,A没有被初始化,产生未定义的值。 2. 如果A是非POD的普通类类型的话,则A调用默认构造函数来进行初始化。 3. 如果A是POD类类型,其数据成员并未进行初始化,产生未定义的值。
■网友
C++的类构造函数没有义务初始化每一个基本变量。整形和浮点值会被初始化为任意值(什么都有可能,0也有可能),而成员类的默认构造函数会被依次调用。你试试多运行几次程序,看看结果有没有变化?另外你的编译环境和操作系统是什么?
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 智叔|很多家长还在整箱买:谈谈关于牛奶的17个真相警惕这些列入黑名单的“假牛奶”
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- 关于微信小程序的思考:运营者该何去何从
- 关于人工智能虚拟人的一些问题
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
