#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;
}
输出:
A Contruction
A Contruction
A destruction
A destruction
A destruction
A destruction
A destruction
我无法理解毁灭召唤。 前 2 次销毁是为了在 vector 中调用复制构造函数。
最佳答案
其他三个破坏来自复制和/或移动构造的对象。
对 push_back
的两次调用将有效地在容器本身中复制构造参数对象的拷贝。
对 push_back
的第二次调用似乎重新分配了 vector 以及 vector 中的唯一对象,从而也复制构造了它,然后销毁了原始对象。
向您的类添加复制构造函数,以记录复制构造函数的调用。
附注实际上,如果您要深入研究这一点,就会发现第二条和第三条“A destroy”消息记录了 a
和 b
对象的销毁。第一个“破坏”消息是由于 vector 重新分配造成的。
关于c++ - C++ 中 vector 的析构函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575070/