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次?
当你使用
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)
归档时间: |
|
查看次数: |
146 次 |
最近记录: |