加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中矢量的内部工作?

发布时间:2020-12-16 10:30:08 所属栏目:百科 来源:网络整理
导读:我正在进行C练习,但我得到意想不到的输出,我希望有人可以解释.练习要求我创建一个名为rock的类,它有一个默认的构造函数,一个复制构造函数和一个析构函数,所有这些都会向cout宣布自己. 在main方法中,我尝试通过值将此类的成员添加到向量: vectorRock byValue
我正在进行C练习,但我得到意想不到的输出,我希望有人可以解释.练习要求我创建一个名为rock的类,它有一个默认的构造函数,一个复制构造函数和一个析构函数,所有这些都会向cout宣布自己.

在main方法中,我尝试通过值将此类的成员添加到向量:

vector<Rock> byValue;
Rock r1,r2,r3;
byValue.push_back(r1);
byValue.push_back(r2);
byValue.push_back(r3);
cout << "byValue populatednn";

我预期的输出(并在练习题中显示)是:

Rock()
Rock()
Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
byValue populated

~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()

但是我得到的输出是:

Rock()
Rock()
Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
~Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
~Rock()
~Rock()
byValue populated

~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()

任何人都可以解释为什么似乎有额外的复制构造函数和析构函数调用?

解决方法

向量调整大小后,必须将元素移动到新位置.

这个是正常的.

如果你打电话

byValue.reserve(10);

在任何调用push_back之前,额外的副本应该消失.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读