В моем методе объект игрока создается как:C++ создать shared_ptr в стек объекта
Player player(fullName,age);
Мой учитель дал нам кусок кода с конструктором, который принимает shared_ptr для объекта игрока.
//constructor of the class
SomeClass(const std::shared_ptr<Socket> client, std::shared_ptr<Player> player)
Допустим, мы хотим вызвать конструктор SomeClass и передать объект игрока, который мы создали в стеке.
Действительно ли безопасно/возможно/полезно создать shared_ptr из объекта стека?
Чтобы сделать вопрос более понятным, скажем, что у нас есть два больших проекта кода, и мы хотим их объединить, поэтому метод из одного проекта вызывается из другого, мы должны переписать все файлы, чтобы использовать shared_ptr или стек объекты exclusivly (для методов, которые необходимо подключить) или мы должны просто создать shared_ptr для объекта стека.
Почему им не уверены в результате:
Что делать, если сфера, где stackobject создается заканчивается, но shared_ptr все еще используется, и наоборот.
Элемент stackobject удаляется из-за пределов видимости или остается в живых, потому что все еще есть ссылка на объект (в другом классе)?
Share_ptr выходит из области видимости и пытается удалить объект, может ли он даже ссылаться на файл stackobject?
Примечание: Я знаю, что я мог бы просто использовать следующий и передать игрок
shared_ptr<Player> player{ new Player {fullName,age} };
Возможный дубликат [Установить общий \ _ptr для указания существующего объекта] (http://stackoverflow.com/questions/24049155/set-shared-ptr-to-point-existing-object) – Zereges
Сторона примечания, если вы находитесь в C++ 11 или новее, это хорошая привычка использовать 'make_shared', когда сможете. в этом случае: 'auto player = std :: make_shared (fullName, age);' В большинстве случаев он более эффективен и безопаснее. –