Osoba(std::string imie, std::string nazwisko)
: imie(imie), nazwisko(nazwisko) { }
Jest to lista inicjalizacyjna konstruktora. W tym miejscu obiekty są tworzone, tz. wywoływane są ich konstruktory.
Jak dla mnie lepsza jest lista inicjalizacyjna, gdyż wywołujesz konstruktor obiektu (który może przyjmować wiele argumentów), a nie operator przypisania. Poza tym na liście inicjalizacyjnej możesz inicjalizować referencje i stałe, możesz wywoływać konstruktory klas bazowych, możesz delegować konstruktory itp.