为什么构造函数只被调用一次?

时间:2012-07-22 06:29:46

标签: c++

考虑以下计划:

class A
{
    public:
    A(int i)
    {
            cout<<"Called"<<endl;
    }
};

int main()
{
    vector<A> v(5,A(1));
    return 0;
}       

我收到了输出:http://ideone.com/81XO6

 Called

为什么即使构造5个对象,构造函数也只被调用一次?
编译器如何在内部处理vector

2 个答案:

答案 0 :(得分:39)

你的班级有两个施工人员,你只看其中一个。 std::vector通过从您提供的原始元素中复制来创建其元素。为此,在您的示例中,类A的复制构造函数被调用了5次。

示例中的A的复制构造函数由编译器隐式声明和定义。如果你愿意,你可以自己声明和定义它。如果你从中打印出来的东西,你会发现它至少被调用了5次。

答案 1 :(得分:12)

从行

开始调用一次
vector<A> v(5,A(1)); 

将调用构造函数并且行变为     向量v(5,X);

其中X是在调用构造函数后构造的对象。

之后使用复制构造函数。

尝试添加

A(const &A);

到类声明中验证这一点。