gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:46:19 25 4
gpt4 key购买 nike

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com