【发布时间】:2011-11-23 17:35:18
【问题描述】:
我正在使用 C++ 进行练习,但我得到了意想不到的输出,希望有人能解释一下。练习要求我创建一个名为 rock 的类,它有一个默认构造函数、一个复制构造函数和一个析构函数,所有这些都向 cout 宣布自己。
在主要方法中,我将尝试按值将此类的成员添加到向量中:
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()
谁能解释为什么似乎对复制构造函数和析构函数有额外的调用?
【问题讨论】:
标签: c++ vector copy-constructor