考虑以下计划:
class A
{
public:
A(int i)
{
cout<<"Called"<<endl;
}
};
int main()
{
vector<A> v(5,A(1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到了输出:http://ideone.com/81XO6
Called
Run Code Online (Sandbox Code Playgroud)
为什么即使我们构造5个对象,构造函数也只被调用一次?编译器
如何vector
内部处理?
AnT*_*AnT 39
你的班级有两个建设者,你只看其中一个.std::vector
通过从您提供的原始元素中复制构造元素来创建元素.为此,在您的示例中,类的copy-constructor 被调用5次.A
A
您的示例中的复制构造函数由编译器隐式声明和定义.如果你愿意,你可以自己声明和定义它.如果你从中打印出一些东西,你会发现它至少被调用了5次.
Ed *_*eal 12
它从一行开始被调用一次
vector<A> v(5,A(1));
Run Code Online (Sandbox Code Playgroud)
将调用构造函数,该行变为向量v(5,X);
其中X是在调用构造函数后构造的对象.
之后使用复制构造函数.
尝试添加
A(const &A);
Run Code Online (Sandbox Code Playgroud)
到类声明来验证这一点.
归档时间: |
|
查看次数: |
1856 次 |
最近记录: |