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