Operator + powinien zwracać nowy obiekt, a u Ciebie operator dodający osobę zwraca obiekt this. Zachowuje się tak, jakby był operatorem +=.
Operator dodający dwie bazy zwraca referencję na obiekt lokalny - to błąd. Obiekt lokalny poza funkcją nie istnieje. Zwracaj przez wartość.
Powinieneś zadbać o const correctness. Czyli metody, które nie zmieniają stanu obiektu, powinny być const, parametry przekazywane przez referencję/wskaźnik także powinny być const, jeśli nie zamierzasz zmieniać ich stanu.
BTW, skoro masz zdefiniowany ctor kopiujący, to operator kopiujący możesz zredukować do:
BazaDanych& operator= (BazaDanych bb)
{
std::swap(osoby_, bb.osoby_);
std::swap(liczbaOsob, bb.liczbaOsob);
return *this;
}
Zresztą masz w nim błąd.
Destruktor BazaDanych powinien usunąć osoby_.
Użyj std::vector zamiast bawić się w tablice dynamiczne.