Here's代码:
#include <iostream>
#include <vector>
class Voice
{
public:
Voice(int value) {
std::cout << "ctor: " << value << std::endl;
}
~Voice() {
std::cout << "delete" << std::endl;
}
private:
};
int main()
{
std::vector<Voice> mVoices;
mVoices = std::vector<Voice>(10, Voice(999));
}
如果创建10个不同的对象,为什么构造函数仅调用1次?
最佳答案
使用时
std::vector<Voice>(10, Voice(999))
您没有告诉编译器生成10个
Voice
并将它们放入 vector 中。您所说的是制作一个Voice
(Voice(999)
),然后将该对象复制到 vector 的每个元素中。这意味着您有1个构造函数调用和10个对该类的复制构造函数的调用。由于该类没有副本构造函数,因此编译器提供了一个副本构造函数,但它不打印任何内容。如果您想查看这些副本的制作过程,则需要像
Voice(const Voice& rhs)
{
std::cout << "copy " << std::endl;
}