Вам разрешено назначать только std::shared_ptr<>
или std::unique_ptr<>
переменной типа std::shared_ptr<>
, см. Документацию std::shared_ptr<>::operator=()
Это позволяет избежать ошибок при назначении указателя. ему, который не выделен в куче, как вы пытаетесь сделать в своем коде.
Обратите внимание, что ваш вызов std::make_shared<int>()
уже выделяет память для int
, так почему бы не использовать это?
std::shared_ptr<int> ptr = std::make_shared<int>();
*ptr = 10;
std::cout << *ptr << '\n';
Вы можете даже написать это укорочение и избежать повторения:
auto ptr = std::make_shared<int>(10);
std::cout << *ptr << '\n';
Если вы действительно хотите назначить другой указатель на ptr
, то вы должны убедиться, что указатель является общим или а также уникальны:
std::shared_ptr<int> ptr;
std::shared_ptr<int> l;
*l = 10;
ptr = l;
std::cout << *ptr << '\n';