C++对象数组问题

C++ primer plus如图,说对象数组如果按如下方法初始化,那么原理是先使用默认构造函数初始化,然后使用Stock临时对象进行复制操作,我去,我测了一下发现根本不需要默认构造函数???这本书什么鬼?

第1个回答  2018-10-10
默认构造函数,就是没有构造函数,系统默认就有一个的。
第2个回答  2018-10-10
有两种情况需要默认构造函数:
1.没有提供初始化列表,如:Stock stocks[4];
这种情况下编译器将调用Stock类的默认构造函数来初始化对象数组中的每个元素。
2.提供了初始化列表,但初始化列表中的元素个数少于数组长度。如:Stock stocks[5] = {Stock("A"), Stock("B"), Stock("C"), Stock("D")};
这种情况下stocks数组的前4个元素将用Stock(const char*)初始化,而剩下的1个元素将用默认构造函数Stock()初始化。
你的程序里,如果宏STKS是4的话,数组长度和初值表中元素个数是一致的,此时无需提供默认构造函数。追问

STKS是4,书上黄色标注的就是对右侧代码的解释,右侧代码4个对象都显式初始化了
这书似乎本身就是错的,如果是临时变量,我又没定义复制构造函数,使用默认复制构造函数复制,那么new分配的内存临时的对象和定义的对象共用,那么临时的用完了自动析构,定义的对象访问这段内存将不安全。

追答

我觉得你似乎断章取义了这段话的意思。这段话应该和上面的那段话连起来看,也就是上面所说的第二种情况,数组长度大于初值表元素个数,此时需要提供默认构造函数。

本回答被提问者和网友采纳
相似回答