Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    146

    [C++] costruttore di copia PER RITORNO DA FUNZIONE

    Salve,
    sto studiando i costruttori di copia del C++ e da quello che ho capito dalla teoria il costruttore di copia dovrebbe funzionare per copiare l'oggetto non solo quando passo un oggetto come parametro formale ad una funzione ma anche se una funzione me lo restituisce, sto cercando di farlo con un esempio ma non riesco, tipo:

    codice:
    class num
    {
    	
    	int i;
        public:
    	num(){cout << this <<endl;};
    	num(const num& a){cout << "COSTRUISCO COPIA" <<endl;};
    	void set(int h){this->i=h;};
    	void shownum();
    	//~num(){cout << "Distruggo" <<endl;}
    };
    
    num getnum(int j)
    {
    	num a;
    	a.set(j);
    	return a;
    }
    
    void num::shownum()
    {
    	cout << "valore " << this->i << endl;
    }
    
    int main()
    {
    num temp=getnum(5);
    
    }
    se ho capito bene:
    getnum restituisce un oggetto di classe num, ma non dovrebbe invocare il costruttore di copia per creare una copia dell'oggetto che restituisce ?

    Non ho capito la teoria o ho cannato l'esempio ?

    Grazie in anticipo per ogni consiglio....

  2. #2
    Per velocizzare il codice al compilatore è consentito omettere la copia per il valore restituito da una funzione (è la cosiddetta RVO - return value optimization).
    Nota che questa è una delle poche deroghe che lo standard C++ fa alla "as-if rule", ovvero la regola per cui ogni ottimizzazione dovrebbe essere "trasparente" (ovvero, qualunque ottimizzazione deve lasciare inalterato il "comportamento osservabile" del codice); in questo caso infatti l'ottimizzazione cambia il comportamento osservabile.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    146
    Ciao, grazie per la risposta molto interessante:

    Permettimi solo un'altra domanda:
    Ma era giusto da parte mia aspettarmi un costruttore di copia in azione in quel modo, cioè nella restituzione di un oggetto ?

    Come faccio poi in generale a sapere quando un compilatore (g++ in questo caso) aziona questo meccanismo ( e non avere così classici dubbi da studente) ?

    Grazie ancora....

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 © 2025 vBulletin Solutions, Inc. All rights reserved.