考虑我有一个班级人物.我在地图中存储指向这些人的指针
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)
但这并没有改变任何东西,构造函数仍然没有被调用,程序关闭处理此代码时出现分段错误.
如何使用指针访问和操作地图?为什么上面没有工作,我没有编译时错误或警告.
非常感谢任何见解,谢谢
鉴于地图:
map<string, People*> myMap;
Run Code Online (Sandbox Code Playgroud)
operator[]不会创建新的People,它将创建People*,即指向不指向任何东西的指针.
最简单的解决方案是让你的地图真正包含人,而不是指针,例如:
map<string, People> myMap;
Run Code Online (Sandbox Code Playgroud)
然后内存管理全部为您处理,使用operator[]将根据需要构建新人.