#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
A(){cout<<"A Contruction"<<endl;}
~A(){cout<<"A destruction"<<endl;}
};
int main()
{
vector<A> t;
A a;
A b;
t.push_back(a);
t.push_back(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
A Contruction
A Contruction
A destruction
A destruction
A destruction
A destruction
A destruction
Run Code Online (Sandbox Code Playgroud)
无法理解销毁电话。前两个销毁是针对在向量中调用的复制构造函数。
其他三个破坏来自复制和/或移动构造的对象。
这两个调用push_back将有效地在容器本身中复制构造参数对象的副本。
对的第二次调用push_back似乎是重新分配了向量以及向量中的唯一对象,从而也对其进行了复制构造,然后销毁了原始对象。
将复制构造函数添加到您的类中,以记录复制构造函数的调用。
PS实际上,如果您要深入研究这一点,那么第二和第三条“破坏”消息将记录您a和b对象的破坏。第一个“破坏”消息是由于向量重新分配造成的。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |