Я новичок в C++. Может кто-то пожалуйста, дайте мне знать, что это неправильно в следующем сегменте кода -C++ newbie: Операция make_shared
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 переменную вместо строкового литерала «Тупая», то v-> появляется свалка(), чтобы работать правильно, то есть следующее -
std::shared_ptr<Person> r1(std::make_shared<Person>(namestr));
Кроме того, следующий способ также, кажется, хотя я использую строковый литерал в intializer.
std::shared_ptr<Person> r1(new Person("Dull"));
Указатели на ошибку Я делаю это очень ценно!
Извините, что следует читать "PLIST. Я исправлю оригинальный пост. –