gpt4 book ai didi

c++ - 类对象作为 vector 元素,析构函数被调用太多次

转载 作者:可可西里 更新时间:2023-11-01 17:44:49 26 4
gpt4 key购买 nike

#include <vector>
#include <iostream>
#include <memory>

using namespace std;

class A
{
static int k;
public:
A(){k++ ; cout << "constructor : " <<k<< endl;};
~A(){k--; cout << "destructor : " << k <<endl;};
void show() { cout<<"current value of k = "<<k<<endl; }
};
int A::k = 0;
int main( )
{
vector<A> test;
test.push_back(A());
test.emplace(test.end(), A());
test[0].show();
cout<<test.size()<<endl;
return 0;
}

输出:

constructor : 1

destructor : 0

constructor : 1

destructor : 0

destructor : -1

current value of k = -1

2

destructor : -2

destructor : -3

为什么析构函数被调用了太多次,因为它应该只被调用两次,因为构造函数只被调用了两次?如何避免这种情况?

最佳答案

正在使用编译器生成的复制构造函数,它不会增加 k

在你的源代码中明确地包含它,一切都会好起来的。

关于c++ - 类对象作为 vector 元素,析构函数被调用太多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36496417/

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