Впервые сам задам сюда вопрос.
Как вообще можно изменить значение
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. До этого не приходилось пользоваться смарт-пойнтерами внутри классов, применял их лишь на уровне функций. Внутри классов всегда юзал обычные сишные указатели - да и, всё-таки, редко приходится выделять память в куче внутри какого-то класса...