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

    [C++] Chiamata non richiesta del distruttore

    Nella classe Scacchiera ho la sovrascrittura dell'operatore di stampa:
    codice:
    ostream& operator << (ostream& os, const Scacchiera ScacchStamp){
      	char c = 'a';
    	for (int i = 0; i< 9; ++i){
    		for (int j=1; j<4; ++j){
    			os<< "\n";
    			for (int k=0; k<9; ++k){
    				for (int m=0; m<3; ++m){
    					if ((j==3) && m==1){
    						os << "______";
    					}
    					else if (m==2 && j!=4){
    						os << "|";
    					}
    					else if (j==2 && m==1){
    						if (i!=0 && k!=0){
    							os << "  " << ScacchStamp._scacch[i-1][k-1] << "  ";
    						}
    						else if (i==0 && k!=0){
    							os << "  "<< c <<"   ";
    							c++;
    						}
    						else if (k==0 && i!=0){
    							os << "  "<< i <<"   ";
    						}
    					}
    					else if((j==1 && m==1) || (i==0 && k==0 && j==2)){
    						os << "      ";
    					}
    				}
    			}
    		}
    	}
    	return os;
    	
    }
    Alla fine dell'esecuzione di una qualsiasi stampa dell'oggetto di tipo Scacchiera viene invocato il distruttore di Scacchiera...perche'?

  2. #2
    Perché passi la scacchiera by value, cioè facendo una copia. Quando la funzione si conclude viene chiamato il distruttore di ScacchStamp.

    forse volevi scrivere questo:


    codice:
    ostream& operator << (ostream& os,  Scacchiera const& ScacchStamp)
    In questo modo non crei alcuna copia.

  3. #3
    Grazie!

  4. #4

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.