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;
}

10-04 14:24