【问题标题】:Destructor call for a vector in c++ [duplicate]析构函数调用c ++中的向量[重复]
【发布时间】:2019-10-27 06:07:45
【问题描述】:
#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 个析构用于在向量中调用复制构造函数。

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

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

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

    push_back 的第二次调用似乎重新分配了向量和向量中的唯一对象,因此也复制构造了它,然后销毁了原始对象。

    向您的类添加一个复制构造函数,以记录复制构造函数的调用。

    附:实际上,如果您要深入研究这一点,它是记录您的 ab 对象的破坏的第二条和第三条“A 破坏”消息。第一个“破坏”消息是由于向量重新分配。

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 2013-07-29
      • 2016-02-08
      • 2020-08-14
      • 1970-01-01
      • 2021-03-17
      • 2016-11-26
      • 2011-03-31
      相关资源
      最近更新 更多