Впервые сам задам сюда вопрос.
Как вообще можно изменить значение 
std::shared_ptr внутри метода класса, если этот смарт-пойнтер является одним из его полей?
PHP Code:
class Test
{
public:
    std::shared_ptr<int> sh_ptr;
    Test()
    {
        sh_ptr(new int(42));  // не работает, ошибка компиляции
        sh_ptr = new int(42);  // тоже не работает, ошибка компиляция
    }
};
Test tst; 
 
- не работает.
Единственный способ изменить 
sh_ptr - это поместить его в список инициализации конструктора: в его заголовке вместо 
Test() нужно написать 
Test() : sh_ptr(new int(42)). В этом случае всё нормально, а 
*(tst.sh_ptr) действительно возвращает 42. Но как быть, если я захочу поменять его 
внутри конструктора/метода, а не только инициализировать? Это же не константа, в конце концов...
P.S. До этого не приходилось пользоваться смарт-пойнтерами внутри классов, применял их лишь на уровне функций. Внутри классов всегда юзал обычные сишные указатели - да и, всё-таки, редко приходится выделять память в куче внутри какого-то класса...