Ich bin neu in C++. Kann jemand lassen Sie mich bitte wissen, was mit dem folgenden Code-Segment falsch ist -C++ Neuling: Operation von 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"));
Meine Absicht ist es, eine Datenbank von Person-Objekte zu erstellen, und ich versuchte, Shared_ptr dafür zu verwenden.
v-> dump() verursacht einen Segmentierungsfehler. Allerdings, wenn ich die ‚nameStr‘ Variable anstelle des Stringliteral „Dull“ verwenden dann die v-> dump() erscheint korrekt funktioniert, dh die folgenden -
std::shared_ptr<Person> r1(std::make_shared<Person>(namestr));
Auch auch die folgende Art und Weise scheint funktionieren, obwohl ich ein String-Literal im Intializer verwende.
std::shared_ptr<Person> r1(new Person("Dull"));
Zeiger auf den Fehler, den ich mache würde sehr geschätzt werden!
Sorry, dass lesen ‚plist‘ haben sollte. Ich korrigiere den ursprünglichen Beitrag. –