Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]copia oggetto e costruttore

    ciao.
    ho una funzione :
    codice:
    void CSapDataLoadsIteratorBase::Initialize(CADODatabase m_db)
    questa funzione viene richiamata cosi:
    codice:
        CSapDataLoadsIteratorBase->Initialize(db)
    dove db è un oggetto di una classe CADODatabase gia' inizializzato.
    se faccio cosi' ogni volta che inizializzo(richiamando la funzione)CSapDataLoadsIteratorBase il costruttore della classe CADODatabase viene richiamato creando un nuovo oggetto,è giusto?
    Allora per ovviare e avere una sola istanza di CADODatabase devo passare il riferimento all oggeto db.
    Come posso ovviare ?
    devo fare cosi':
    codice:
        CSapDataLoadsIteratorBase->Initialize(&db)
    e utilizzare db come puntatore?
    e quindi cambiare tutto il codice?
    o esiste un metodo meno invasivo?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++]copia oggetto e costruttore

    Originariamente inviato da giuseppe500
    ...
    esiste un metodo meno invasivo?
    grazie.
    Passando l'argomento per copia viene richiamato il costruttore di copia per inizializzare m_db ma db non subisce variazioni.

    Il modo migliore è passare un reference alla funzione.
    codice:
    void CSapDataLoadsIteratorBase::Initialize(CADODatabase& m_db)
    se eventuali modifiche devono ripercuotersi all'esterno.
    codice:
    void CSapDataLoadsIteratorBase::Initialize(const CADODatabase& m_db)
    Se l'oggetto rimane immutato.
    Il tutto con un semplice:
    codice:
        CSapDataLoadsIteratorBase->Initialize(db);

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    intanto 1000 grazie poi...
    se eventuali modifiche devono ripercuotersi all'esterno.
    codice:void CSapDataLoadsIteratorBase::Initialize(const CADODatabase& m_db)
    cosa fa il const?
    permette quindi alle eventuali modifiche di ripercuotersi all'esterno?
    quindi non ha nulla a che fare con costante.
    ciao.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    No. Se dichiarato dichiarato const nel prototipo di funzione, l'oggetto diventa const a tutti gli effetti. Da usare ma non toccare. Se hai bisogno di fare cambiamenti all'oggetto all'interno della funzione da ripercuotere fuori, devi usare il prototipo senza const.

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.