Member access is not per instance but per class. Within the class definition you have access to all private members (of any instance of that class).
From cppreference:
The name of every class member (static, non-static, function, type, etc) has an associated "member access". When a name of the member is used anywhere a program, its access is checked, and if it does not satisfy the access rules, the program does not compile: [...]
This is just the "Explanation" (examples follow thereafter), but note that it says "name of every class member", not "members of objects".
Sloppy speaking, the reasoning of having access per class is that inside a member method you should know what you are doing when touching the internals. Wether you are touching the internals of this
or of some other
does not change the fact that you need to be aware of the inner workings of the type.