gpt4 book ai didi

c++ - 如何让STL映射仅构造/破坏插入的对象一次

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:12 26 4
gpt4 key购买 nike

我发现了一个关于 STL map 的非常有偏见的事实。出于某种原因,我无法将对象插入到 map 中以仅构造/破坏一次。

例子:

struct MyObject{
MyObject(){
cout << "constructor" << endl;
}
~MyObject(){
cout << "destructor" << endl;
}
};
int main() {
std::map<int, MyObject> myObjectsMap;
myObjectsMap[0] = MyObject();
return 0;
}

返回:

constructor
destructor
destructor
constructor
destructor

如果我这样做:

typedef std::pair<int, MyObject> MyObjectPair;
myObjectsMap.insert( MyObjectPair(0,MyObject()));

返回:

constructor
destructor
destructor
destructor

我正在插入负责自己内存分配的对象,因此当它们被破坏时它们会自行清理,多次被破坏给我带来了一些麻烦。

最佳答案

我建议您添加一个复制构造函数 - 我认为这就是用于“缺失”构造的内容。

代码:

#include <iostream>
#include <map>

using namespace std;

struct MyObject{
MyObject(){
cout << "no-arg constructor" << endl;
}
MyObject(const MyObject&) {
cout << "const copy constructor" << endl;
}
~MyObject(){
cout << "destructor" << endl;
}
};
int main() {
std::map<int, MyObject> myObjectsMap;
myObjectsMap[0] = MyObject();
return 0;
}

输出:

no-arg constructor
const copy constructor
const copy constructor
destructor
destructor
no-arg constructor
destructor
destructor

关于c++ - 如何让STL映射仅构造/破坏插入的对象一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2984959/

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