Сырые указатели не враги. Мы не можем написать ни одной полезной программы на C ++ без них в одной форме или форме. Проблема в том, что владеет необработанными указателями. Они не имеют четкого владения семантией c, связанной с их типом, и поэтому программисту приходится выполнять трудную задачу по управлению временем жизни вручную. Не бойтесь передавать необработанный указатель в качестве ручки, если вам нужно.
Что приводит нас к следующему пункту. Оба метода, которые вы продемонстрировали, основаны на сырых указателях. Перегруженный operator->
должен возвращать необработанный указатель (в конце концов), чтобы мы могли применить доступ к элементу к объекту. По сути, первая версия эквивалентна
v = foo.operator->() -> getvalue();
Она работает точно так же, как и вторая форма, только с syntacti c sugar сверху.
Вы должны предпочесть первую форму потому что это короче и читабельно. Но это не избегает необработанных указателей, это невозможно избежать.