¿Por qué los objetos de la misma clase tienen acceso a los datos privados de los demás?

¿Por qué los objetos de la misma clase tienen acceso a los datos privados de los demás?

class TrivialClass {
public: 
  TrivialClass(const std::string& data) :
    mData(data) {};

  const std::string& getData(const TrivialClass& rhs) const {
    return rhs.mData;
  };

private:
  std::string mData;
};

int main() {
  TrivialClass a("fish");
  TrivialClass b("heads");

  std::cout << "b via a = " << a.getData(b) << std::endl;
  return 0;
}

Este código funciona. Es perfectamente posible que el objeto a acceda a datos privados del objeto b y lo devuelva. ¿Por qué esto es así? Creo que los datos privados son privados. (Comencé tratando de comprender los constructores de copias en el idioma de pimpl, pero luego descubrí que ni siquiera entendía esta situación simple).

Respuestas a la pregunta(7)

Su respuesta a la pregunta