|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 1102
|
[C++] Funzione restituisce riferimento a oggetto proprio
Raga,
vi posto questo codice : sto studiando l'overloading degli operatori Codice:
Table::Table(const Table &t){
p=new char[size=t.size];
for (int i=0; i<size; i++)
p[i]=t.p[i];
Codice:
const Table& Table::operator= (const Table & t){
if(this != &t) { //self assignment!
delete [] p;
p=new char[size=t.size];
for (int i=0; i<size; i++)
p[i]=t.p[i];
}
return *this;
}
Codice:
const Table& Table 2- ma this(puntatore all'oggetto proprio non dovrebbe avere lo stesso indirizzo di t, quindi il programma non dovrebbe nemmeno andare avanti,dove mi sbaglio? Ultima modifica di ubanton : 20-04-2012 alle 09:06. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
|
Non stai modificando t ma l'oggetto *this.
Codice:
Table t1, t2; t1 = t2; // operatore =. Equivale a t1.operator=(t2) Penso sia buona norma considerare la possibile eccezione bad_alloc, non tanto per questo esempio ma per capire i momenti in cui serve in fase di apprendimento. Codice:
const Table& Table::operator= (const Table & t){
if(this != &t)
{ // i due oggetti differiscono
char* old_p = p;
size_t old_size = size;
p = 0;
try
{
// l'assegnamento di size potrebbe sfuggire scritto qui
p = new char[size=t.size];
} catch (std::bad_alloc e)
{
// si ristabilisce lo stato iniziale. Sarà il chiamante che
// deciderà cosa fare.
delete[] p;
p = old_p;
size = old_size;
throw std::bad_alloc;
}
for (int i=0; i<size; i++)
p[i]=t.p[i];
}
return *this;
}
__________________
AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200 Ultima modifica di __ZERO_UNO__ : 20-04-2012 alle 12:15. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:49.



















