Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C++] Creare copia di oggetto

    Voglio creare un metodo di classe che faccia una copia esatta dell'oggetto.
    Poi devo quindi poter fare:
    codice:
    y=x.copia()
    Se dentro al metodo copia creo un nuovo oggetto, lo inizializzo con i valori di x e poi lo ritorno...rimane visibile all'esterno del metodo copia o viene distrutto? Altrimenti dovrei allocare dinamicamente e quindi ritornare un puntatore deduco...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Più o meno non è lo stesso argomento di "Clonare ..." ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    No, non voglio sovrascrivere costruttori di copia o operatori vari, utilizzo un normale metodo

  4. #4

    Re: [C++] Creare copia di oggetto

    Originariamente inviato da starcraftworld
    Se dentro al metodo copia creo un nuovo oggetto, lo inizializzo con i valori di x e poi lo ritorno...rimane visibile all'esterno del metodo copia o viene distrutto? Altrimenti dovrei allocare dinamicamente e quindi ritornare un puntatore deduco...
    no, rimane visibile.

  5. #5
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Cos'ha il costruttore di copia ke nn t piace?

  6. #6
    Originariamente inviato da starcraftworld
    No, non voglio sovrascrivere costruttori di copia o operatori vari, utilizzo un normale metodo
    Lì stai usando l' operator=.
    Quando usi quello è consigliato dichiarare gli altri 2 (distruttore e copia).

  7. #7
    Io non voglio sovrascrivere l'operatore = perchè vorrebbe dire che tutte le copie che faccio sono profonde...

  8. #8
    no, sei tu a decidere quali dati copiare.

    ti copio l'esempio dell'altra discussione
    codice:
    Scacchiera& Scacchiera::operator=(const Scacchiera& rhs)
    {
        if (this == &rhs)
            return *this; // uguale a se stesso, quindi non copiare
        else
        {
            // copia
            memcpy(_scacch, rhs._scacch, sizeof(Casella)*64); // copia uguale della scacchiera
            if (re_bianco == NULL) // ovvero non vi è memoria allocata per queso oggetto
                re_bianco = new Re(); // quindi creane nuova
            *re_bianco = *rhs.re_bianco;  // copia infine il contenuto
            if (re_nero == NULL)
            re_nero = new Re();
            *re_nero = *rhs.re_nero;
        }
    
        return *this;
    
    }
    per esempio: se tu non volessi copiare il re, basterebbe eliminare quella linea

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.