У меня есть объект фабричного метода, который создает карту следующим образом:
// 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. Когда я отлаживал, я заметил, что объект карты, похоже, не создается и не заполняется. Как правильно создать карту в куче?
PS: я не хочу создавать карту и передавать по значению, я бы предпочел сделать это с помощью указателя в качестве учебного упражнения. Кроме того, если я создаю карту в стеке, она заполняется, но, конечно, я не могу передать ее объектам Foo
, поскольку она выходит за рамки.