Perché non è una classe. char* è un puntatore e come tutti i puntatori è stupido.Originariamente inviato da Angelo000
invece il vettore di char* no? e se no, perchè?
Se non hai avuto problemi fino a ora è perché non hai mai deallocato il contenuto del vector<char*>. Il problema nasce quando andrai a deallocare il char* visto che ti ritroverai due vector<char*> con gli elementi (che sono puntatori) che punteranno alla stessa locazione di memoria. Visto che non è possibile deallocare due volte lo stesso puntatore, la prima volta tutto fila liscio, la seconda avrai un crash.
Detto in parole povere stai facendo qualcosa del genere:
Ricorda che il vector per assegnare gli elementi interni utilizza l'operatore= ma di suo non sa se quello che contiene è un puntatore o no. Deve essere il programmatore a gestire i vari elementi interni. Con la std::string non sarebbe stato necessario ad esempio perché anche lei ha operatore di assegnamento e cctor.codice:char* buffer=new char[16]; char* tmp = buffer; delete[] buffer; delete[] tmp;
Risposta breve: si.E senti, visto che nel costruttore di copia si può evitare di far cicli per Vector e List, si possono evitare anche quando si scrive l'ostream?
Risposta corretta: si può fare mascherando il ciclo.
copy effettua un ciclo tra gli elementi e li manda a cout, il tutto con una riga di codice.codice:copy(r.quantita.begin(),r.quantita.end(),ostream_iterator<int>(cout));
Nota che usando iteratori, quantita può essere anche una list e il codice non cambia.
Con:
vai a capo ad ogni iterazione.codice:copy(r.quantita.begin(),r.quantita.end(),ostream_iterator<int>(cout,'\n')); // o "\n" non ricordo.
O poco aggiornatoP.S: si, il prof è proprio matto..![]()
![]()

Rispondi quotando