当我创建N个对象的向量时,为什么CTOR不被调用N次?

mar*_*zzz 1 c++ constructor stl vector

这是代码:

#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));
}   
Run Code Online (Sandbox Code Playgroud)

如果我创建10个不同的对象,为什么构造函数只调用1次?

Pet*_*ker 9

该类具有编译器生成的复制构造函数,该构造函数尚未检测.


Nat*_*ica 5

当你使用

std::vector<Voice>(10, Voice(999))
Run Code Online (Sandbox Code Playgroud)

你没有告诉编译器制作10 Voice秒并将它们放入向量中.你告诉它的是make one Voice(Voice(999))然后将该对象复制到向量中的每个元素.

这意味着您有1个构造函数调用和10个类的复制构造函数调用.由于该类没有复制构造函数,因此编译器提供了一个复制构造函数,但它不会打印任何内容.如果你想看到这些副本,你需要写自己喜欢

Voice(const Voice& rhs)
{
    std::cout << "copy " << std::endl;
}
Run Code Online (Sandbox Code Playgroud)