析构函数在C ++中调用向量

用户名
#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

无法理解销毁电话。前两个销毁是针对在向量中调用的复制构造函数。

山姆·瓦尔沙夫奇克

其他三个破坏来自被复制和/或移动构造的对象。

这两个调用push_back将有效地在容器本身中复制构造参数对象的副本。

的第二次调用push_back似乎是重新分配了向量以及向量中的唯一对象,从而也对其进行了复制构造,然后销毁了原始对象。

将复制构造函数添加到您的类中,以记录复制构造函数的调用。

PS实际上,如果您要深入研究这一点,那么第二和第三条“破坏”消息将记录您ab对象的破坏第一个“破坏”消息归因于向量重新分配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章