gpt4 book ai didi

c++ - 为什么在使用对象作为多映射中的键时,析构函数被调用得太多了

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:06 25 4
gpt4 key购买 nike

我正在使用一个对象作为多重映射中的键,如下所示。我只有 1 个数据类实例:Data d1(1,2)

#include <iostream>
#include <string>
#include <map>

using namespace std;

class Data{
public:
static int counter;
Data(int x = 0, int y = 0):_x(x),_y(y){counter += 1; cout <<"constructor call " << counter << endl;}

virtual ~Data()
{
counter -= 1;
cout <<"calling destructor " << counter << endl;
}

bool operator<(const Data & right) const{
return _x < right._x && _y < right._y;
}
private:
int _x;
int _y;
};

int Data::counter = 0;

int main()
{
multimap<Data, string> m_map;

Data d1(1,2);
m_map.insert(make_pair(d1, "1"));

return 0;
}

在输出中,析构函数被调用了 3 次。

constructor call 1
calling destructor 0
calling destructor -1
calling destructor -2

最佳答案

您有多个实例。

class Data {
public:
static int counter;
Data(int x = 0, int y = 0) :_x(x), _y(y) { counter += 1; cout << "constructor call " << counter << endl; }
Data(const Data & other) :_x(other._x), _y(other._y) { counter += 1; cout << "copy constructor call " << counter << endl; }

virtual ~Data()
{
counter -= 1;
cout << "calling destructor " << counter << endl;
}

bool operator<(const Data & right) const {
return _x < right._x && _y < right._y;
}
private:
int _x;
int _y;
};

这将显示复制构造函数也被调用。

关于c++ - 为什么在使用对象作为多映射中的键时,析构函数被调用得太多了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46447485/

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