c++ - C++ 中 vector 的析构函数调用

标签 c++ vector

#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”消息记录了 ab 对象的销毁。第一个“破坏”消息是由于 vector 重新分配造成的。

关于c++ - C++ 中 vector 的析构函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575070/

相关文章:

带 header 的 C++ 委托(delegate)构造函数

c++ - Qt 中的多线程事件处理程序

c++ - 返回指向 vector 中项目的指针(来自迭代器)

c++ - 斯坦福 C++ 库映射 vector 错误

rust - 如何使用向量在结构上导出克隆和复制?

c++ - 由于速度原因使用std vector作为map,靠谱吗?

c++ - 关于循环变量优化的标准合规行为是什么?

c++ - 指针随时间的改进/变化?

c++ - WGS84中2个 “linearly”运动对象之间的碰撞检测

c++ - 从 MRI 2D 多切片的 DICOM header 中读取切片数