Ho una classe con 2 variabili char *, quando vado a inizializzarle tramite l'operatore >> mi stampa una stringa che non corrisponde a quella che inserisco. Tuttavia, quando stampo C.nome all'interno della funzione stessa, la stringa è corretta, è nel main che viene cambiata. Questo succede solo con le var char *, l'int per esempio non viene cambiato.

cliente.h
codice:
class cliente{
      private:
              char * nome;
              char * cognome;
              int eta;
              int test[3];
              
              //overload << e >>
              friend ostream& operator<<(ostream &,const cliente &);
              friend istream& operator>>(istream &,cliente &);
             
      public:             
               //funzioni varie
cliente.cpp
codice:
istream& operator>>(istream& in,cliente& C){
         buffer app;
         char * capp;
         
         cout << "Inserisci nome:\n";
         in >> app;
         alloca(capp,app);
         C.nome=capp;
         cout << capp << endl;
         cout << C.nome << endl;
         cout << "Inserisci cognome:\n";
         in >> app;
         alloca(capp,app);
         C.cognome=capp;
         cout << "Inserisci eta:\n";
         in >> C.eta;
         return in;
         }
allocstr.h //contiene la funzione d'allocazione
codice:
void alloca(char *&s,buffer bf){
     s = new char[strlen(bf)];
     s=bf;
     }
Qualcuno sa dove mettere le mani?