C++对象数组问题

C++primerplus如图,说对象数组如果按如下方法初始化,那么原理是先使用默认构造函数初始化,然后使用Stock临时对象进行复制操作,我去,我测了一下发现根本不需要... C++ primer plus如图,说对象数组如果按如下方法初始化,那么原理是先使用默认构造函数初始化,然后使用Stock临时对象进行复制操作,我去,我测了一下发现根本不需要默认构造函数???这本书什么鬼? 展开
 我来答
你我同行能
2018-10-10 · 超过30用户采纳过TA的回答
知道答主
回答量:79
采纳率:63%
帮助的人:21.7万
展开全部
默认构造函数,就是没有构造函数,系统默认就有一个的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GTA小鸡
高粉答主

2018-10-10 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
有两种情况需要默认构造函数:
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分配的内存临时的对象和定义的对象共用,那么临时的用完了自动析构,定义的对象访问这段内存将不安全。
追答
我觉得你似乎断章取义了这段话的意思。这段话应该和上面的那段话连起来看,也就是上面所说的第二种情况,数组长度大于初值表元素个数,此时需要提供默认构造函数。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式