Ошибка сегментации с общими указателями - PullRequest
0 голосов
/ 24 марта 2019

Что не так с этим кодом (я свернул весь код)? Я не могу понять, почему pu.useIt(); вызывает ошибку сегментации.

#include <memory>

using namespace std;

class Person {
    private:
    shared_ptr<string> name;

    public:
    void setName(shared_ptr<string> name) {
        this->name = name;
    }

    shared_ptr<string> getName() {
        return name;
    }
};

class PersonCreator {
    shared_ptr<Person> person;

    public:
    void createAmy() {
        shared_ptr<string> amysName = make_shared<string>("amy");
        person->setName(amysName);
    }
};

class PersonUser {
    public:
    void useIt() {
        PersonCreator pc;
        pc.createAmy();
    }
};

int main()
{
    PersonUser pu;
    pu.useIt();

    return 0;
}

1 Ответ

2 голосов
/ 24 марта 2019

Вам нужно инициализировать person, теперь он пуст, ctor по умолчанию для shared_ptr означает, что он указывает на nullptr:

void createAmy() {
        shared_ptr<string> amysName = make_shared<string>("amy");
        person = std::make_shared<Person>();  // added
        person->setName(amysName);
    }
...