esatto, se ad esempio la classe dell'oggetto 'a' ha un campo pubblico nome_campo puoi modificarlo con

a.nome_campo = 0;

però se l'oggetto 'a' non è passato per reference, ma per valore, stai modificando una copia dell'oggetto, esempio:

Codice PHP:
#include <iostream>

using namespace std;

class 
MiaClasse{

public:

    
int nome_campo;

    
MiaClasse(){
       
nome_campo 1;
    }
};

//Passaggio per valore
void f1(MiaClasse a){
      
a.nome_campo 0;
}

void f2(MiaClasse &a){
      
a.nome_campo 0;
}

int main(){
    
MiaClasse a;
    
cout << "a.nome_campo dopo la creazione: " << a.nome_campo << endl;
    
f1(a);
    
cout << "a.nome_campo dopo f1(a): " << a.nome_campo << endl;
    
f2(a);
    
cout << "a.nome_campo dopo f2(a): " << a.nome_campo;
    return 
0;

l'ouput che ottieni è:

Codice PHP:
a.nome_campo dopo la creazione1
a
.nome_campo dopo f1(a): 1
a
.nome_campo dopo f2(a):