el operador-> valor de retorno de los punteros inteligentes [duplicar]

Esta pregunta ya tiene una respuesta aquí:

-> uso en punteros inteligentes 2 respuestas

Los punteros inteligentes como shared_ptr se pueden utilizar como punteros comunes con* y-> operador. Los libros dicen que-> operador devuelve el puntero que shared_ptr almacena. Así que puedes usarlo para acceder al objeto al que apunta este puntero. Pero estoy confundido aquí. Mira el código de abajo.

class A
{
public:
    A(int v = 20){val = v;}
    int val;
}
A* p1 = new A;
std::cout<<p1->val;  //This is common sense

boost::shared_ptr<A> p2(new A);
std::cout<<p2->val;  //This is right
//My question is that p2-> returns the pointers of the object, then maybe another 
//-> should be used?
//like (p2->)->val? 

Respuestas a la pregunta(3)

Su respuesta a la pregunta