【发布时间】:2019-03-01 04:45:01
【问题描述】:
我对下面的代码感到困惑。
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
A(int _a) : a(_a)
{
cout << "A(" << a << ") created" << endl;
}
~A()
{
cout << "A(" << a << ") deleted" << endl;
}
int a;
};
void test()
{
vector<A> as;
A a1(1);
A a2(2);
as.push_back(a1);
as.push_back(a2);
cout << "test ended" << endl;
}
int main()
{
test();
return 0;
}
这是输出。
A(1) created
A(2) created
A(1) deleted <== ?
test ended
A(2) deleted
A(1) deleted
A(1) deleted
A(2) deleted
为什么会有额外的“A(1) deleted”?
我知道在执行 push_back 时存在隐式复制构造。但是,我的问题是为什么 a1 的处理方式与 a2 不同?
【问题讨论】:
-
编译器仍在生成复制构造函数。因此,正在创建一些您没有看到的实例。
-
查找规则 5,你已经移动/复制了对象。
标签: c++