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

225 Views Asked by At

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?

2

There are 2 best solutions below

4
HolyBlackCat On BEST ANSWER

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.

0
samuel potter On

the arrow operator -> is used to access the member variables or member functions of an object that is pointed to by a pointer. The arrow operator is used with pointers because when we use the dot operator . to access a member variable or function, the compiler will assume that we are accessing a member of an object, not a pointer to an object.