【发布时间】:2013-05-30 15:07:30
【问题描述】:
我有一个工厂方法对象,它创建如下映射:
// 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 对象,因为它超出了范围。
【问题讨论】:
-
为什么都是动态分配?只需分配自动对象并按值返回。
-
我想学习如何正确地做到这一点。我知道按值传递会起作用,但我想了解为什么这不起作用。
-
正确地做就是避免所有这些动态分配。您正在学习不正确地做到这一点。
-
@Salgar 虽然存在内存泄漏,所以并非完全没问题。
-
@dev_nut: Not necessarily.