gpt4 book ai didi

c++ - 如何在两个对象之间干净地传递 std::map ?

转载 作者:行者123 更新时间:2023-11-28 07:35:34 25 4
gpt4 key购买 nike

我有一个工厂方法对象,它创建一个映射如下:

// std namespace is imported

Foo* createFoo() {
map<int,int>* fooMap = new map<int,int>();
for (int i=0;i < 4;i++) {
fooMap->insert(make_pair(i+1, i+2));
}
return new Foo(fooMap);
}

foo类如下:

class Foo { 
private:
map<int,int>* m_fooMap;
public:
Foo(map<int,int>* fooMap) : m_fooMap(fooMap) { };
void doIt() {
cout << m_fooMap->at(1) << endl;
}
}

如果我调用 doIt 函数,这似乎会引发异常。当我调试时,我注意到 map 对象似乎没有被创建和填充。如何正确地在堆上创建 map ?

PS:我不想创建 map 并按值传递,我更愿意通过指针来完成它作为学习练习。此外,如果我在堆栈上创建 map ,它会被填充,但当然我不能将它传递给 Foo 对象,因为它超出了范围。

最佳答案

我更喜欢没有任何显式动态内存分配的方法:

class Foo { 
private:
std::map<int,int> m_fooMap;
public:
Foo(const std::map<int,int>& fooMap) : m_fooMap(fooMap) {};
Foo(std::map<int,int>&& fooMap) : m_fooMap(std::move(fooMap)) {};
void doIt() {
cout << m_fooMap.at(1) << endl;
}
};

Foo createFoo()
{
std::map<int,int> fooMap;
for (int i=0;i < 4;i++) {
fooMap.insert(make_pair(i+1, i+2));
}
return Foo(fooMap);
}

关于c++ - 如何在两个对象之间干净地传递 std::map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16839725/

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