我是 C++ 新手。有人可以让我知道以下代码段有什么问题 -
class Person {
public:
const std::string& name;
Person(const std::string& s): name(s) {}
void dump(void) const {
cout << name << endl;
//cout << &name << endl;
}
};
std::map<std::string, std::shared_ptr<Person>> plist;
std::string namestr = "Hoo";
std::shared_ptr<Person> r1(std::make_shared<Person>("Dull"));
plist.insert({"Key1", r1});
auto u = plist.find("Key1");
shared_ptr<Person> v = u->second;
v->dump();
plist.erase(plist.find("Key1"));
我的意图是创建一个 Person 对象的数据库,我试图为此使用 shared_ptr 。
v->dump() 导致分段错误。但是,如果我使用 'namestr' 变量而不是字符串文字“Dull”,那么 v->dump() 似乎可以正常工作,即以下 -
std::shared_ptr<Person> r1(std::make_shared<Person>(namestr));
此外,即使我在初始化程序中使用字符串文字,以下方式似乎也有效。
std::shared_ptr<Person> r1(new Person("Dull"));
指出我所犯的错误将不胜感激!