如何使用指针处理地图?

use*_*190 4 c++ pointers map

考虑我有一个班级人物.我在地图中存储指向这些人的指针

map<string, People*> myMap;
Run Code Online (Sandbox Code Playgroud)

要创建新人,我使用maps []运算符.

myMap["dave"]->sayHello();
Run Code Online (Sandbox Code Playgroud)

但这给了我一个分段错误,它甚至没有调用People类的构造函数.

我也试过了

 myMap.insert( std::make_pair( "dave", new People() ));
Run Code Online (Sandbox Code Playgroud)

但这并没有改变任何东西,构造函数仍然没有被调用,程序关闭处理此代码时出现分段错误.

如何使用指针访问和操作地图?为什么上面没有工作,我没有编译时错误或警告.

非常感谢任何见解,谢谢

Fle*_*exo 9

鉴于地图:

map<string, People*> myMap;
Run Code Online (Sandbox Code Playgroud)

operator[]不会创建新的People,它将创建People*,即指向不指向任何东西的指针.

最简单的解决方案是让你的地图真正包含人,而不是指针,例如:

map<string, People> myMap;
Run Code Online (Sandbox Code Playgroud)

然后内存管理全部为您处理,使用operator[]将根据需要构建新人.