c++pointersdot-operator

Why I should use '->' instead of '.' in a pointer of the object?


I agree this might be a very beginner's question, but I have no idea why I can't use '.' to access a member of a pointer to an object.

e.g.

JMP *sum_obj = new JMP("0");
JMP a;
sum_obj->number;
a.number;

sum_obj.number; // error: request for member ‘number’ in ‘sum_obj’, which is of pointer type ‘JMP*’ (maybe you meant to use ‘->’ ?)

Here, why should I use -> for the sum_obj number member?


Solution

  • In C there would be no technical reason. A non-technical reason is clarity - if you see a ->, you know that it's a pointer and can potentially be null, so you might need to check for null before dereferencing it.

    In C++, there are classes that pretend to be pointers to some degree (std::unique_ptr, std::shared_ptr, std::optional). They support * and -> like pointers, but they also have their own member functions, accessible with .. Separating the notation this way avoids any possible member name conflicts, and also adds clarity.