gpt4 book ai didi

c++ - C++ 中 vector 的内部工作?

转载 作者:太空狗 更新时间:2023-10-29 19:44:30 25 4
gpt4 key购买 nike

我正在用 C++ 做一个练习,但我得到了意想不到的输出,我希望有人能解释一下。练习要求我创建一个名为 rock 的类,它有一个默认构造函数、一个复制构造函数和一个析构函数,所有这些都向 cout 声明自己。

在 main 方法中,我将尝试按值将此类的成员添加到 vector 中:

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

我预期的输出(并显示在练习解决方案中)是:

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()

谁能解释为什么似乎有对复制构造函数和析构函数的额外调用?

最佳答案

当调整 vector 大小时,必须将元素移动到新位置。

这是正常的。

如果你打电话

byValue.reserve(10);

在任何调用 push_back 之前,多余的拷贝应该消失。

关于c++ - C++ 中 vector 的内部工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7530453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com